답변:
드루팔 7의 경우 :
Drupal에는 drupal_page_is_cacheable () 함수가 있으며이를 페이지를 캐시 불가능으로 설정하는 데 사용할 수 있습니다.
설명서는 다음과 같습니다. https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/drupal_page_is_cacheable/7
드루팔 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' => 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);
}
}
}
자세한 내용은 https://www.drupal.org/docs/8/api/routing-system/altering-existing-routes-and-adding-new-routes-based-on-dynamic-ones를 참조 하십시오.
이 모듈을 사용하여 drupal 캐시와 varnish https://www.drupal.org/project/ape 와 같은 서버 측 캐시를 피할 수 있습니다
acquia 서버의 Varnish 캐시에서 작동합니다.