Answers:
对于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中,您可以将cache称为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服务器上的Varnish缓存中为我工作。