web-dev-qa-db-ja.com

特定のページがキャッシュされるのを防ぐにはどうすればよいですか?

Drupal 8サイトでキャッシュをアクティブ化しました。もちろん、すべてのページが期待どおりにキャッシュされています。

ただし、特定のページでそのキャッシュをバイパスしたいのですが。

私のコントローラーでは、次のようにページを作成しました。

public function myPage() {
  return [
    '#markup' => time(),
  ];
}

Drupalページをキャッシュしないようにするにはどうすればよいですか?

15
rpayanm

Drupal 7:の場合

Drupalには、ページをキャッシュ不可に設定するために使用できる関数drupal_page_is_cacheable()があります。

ここにドキュメントがあります: https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/drupal_page_is_cacheable/7

Drupal 8:の場合

// Deny any page caching on the current request.    
\Drupal::service('page_cache_kill_switch')->trigger();

次に、コードは次のとおりです。

public function myPage() {
  \Drupal::service('page_cache_kill_switch')->trigger();
  return [
    '#markup' => time(),
  ];
}

いつものように、一度キャッシュをクリーンアップしてください

31
Zuzuesque

特定のページのキャッシュを無効にする

ルート宣言からのカスタムページのキャッシュを無効にします。カスタムコントローラー(カスタムモジュール)のキャッシュを無効にする場合は、no_cacheオプション(YOUR_MODULE.routing.yml)。例:ファイル:mymodule.routing.yml

mymodule.myroute:
  path: '/mymodule/mypage'
  defaults:
    _controller: '\Drupal\mymodule\Controller\Pages::mypage'
    _title: 'No cache page'
  requirements:
    _access: 'TRUE'
  options:
    no_cache: 'TRUE'

ルートの応答をキャッシュ不可としてマークする「no_cache」ルートオプションを追加

19
Vladislav

Drupal 8では、ページの出力をキャッシュするまで、キャッシュをmax-ageとして言及できます。特定のページ(コントローラページ)のキャッシュを削除するには、'max-age' => 0,

public function myPage() {
  return [
   '#markup' => time(),
   '#cache' => ['max-age' => 0,],    //Set cache for 0 seconds.
  ];
} 
12
Ashish Deynap

Contribモジュールで何かをする必要がある場合は、RouteSubscriberを使用してキャッシュの問題を修正できます。あなたはサービスが必要です...または単にdrupal gr if drupalコンソール。

 namespace Drupal\mymodule\Routing;

 use Drupal\Core\Routing\RouteSubscriberBase;
 use Symfony\Component\Routing\RouteCollection;

 class RouteSubscriber extends RouteSubscriberBase {

/**
 * {@inheritdoc}
 */
protected function alterRoutes(RouteCollection $collection) {
  // Find the route you need ...
  if ($route = $collection->get('some.contrib.route')) {
    $options = $route->getOptions();
    $options['no_cache'] = TRUE;
    $route->setOptions($options);
  }
 }
}

詳細情報 https://www.drupal.org/docs/8/api/routing-system/altering-existing-routes-and-adding-new-routes-based-on-dynamic-ones を参照してください=

3
Taggart Jensen

このモジュールを使用して、drupalキャッシュおよびワニスのようなサーバー側キャッシュ https://www.drupal.org/project/ape を回避できます。

AcquiaサーバーのVarnishキャッシュで動作します。

1
VishnuMoorthy