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


14

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

ただし、特定のページでそのキャッシュをバイパスするようにします。

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

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

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

回答:


31

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(),
  ];
}

通常どおり、完了したらキャッシュを消去します


19

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

ルート宣言からカスタムページのキャッシュを無効にします。カスタムコントローラー(カスタムモジュール)のキャッシュを無効にする場合、 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」ルートオプションを追加


11

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

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

2

contribモジュールで何かを行う必要がある場合は、RouteSubscriberを使用してキャッシュの問題を修正できます。サービスが必要です...またはdrupal grdrupalコンソールがあれば実行するだけです。

 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をご覧ください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.