回答:
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(),
];
}
通常どおり、完了したらキャッシュを消去します。
ルート宣言からカスタムページのキャッシュを無効にします。カスタムコントローラー(カスタムモジュール)のキャッシュを無効にする場合、
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'
Drupal 8では、ページ出力をキャッシュするまで、キャッシュをmax-ageとして指定できます。特定のページ(コントローラーページ)のキャッシュを削除するには、と記述し'max-age' => 0,
ます。
public function myPage() {
return [
'#markup' => time(),
'#cache' => ['max-age' => 0,], //Set cache for 0 seconds.
];
}
contribモジュールで何かを行う必要がある場合は、RouteSubscriberを使用してキャッシュの問題を修正できます。サービスが必要です...またはdrupal gr
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);
}
}
}
このモジュールを使用して、Drupalキャッシュと、ニスhttps://www.drupal.org/project/apeなどのサーバー側キャッシュを回避できます。
私の場合は、acquiaサーバーのワニスキャッシュで動作します。