특정 페이지가 캐시되지 않도록하려면 어떻게해야합니까?


15

Drupal 8 사이트에서 캐시를 활성화했으며 모든 페이지가 예상대로 캐시됩니다.

그러나 특정 캐시를 우회하는 특정 페이지를 갖고 싶습니다.

내 컨트롤러에서 다음과 같이 페이지를 작성했습니다.

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

Drupal에게 페이지를 캐시하지 말라고하려면 어떻게해야합니까?

답변:


31

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

평소와 같이 캐시를 정리합니다 .


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' => 0,.

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

3

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.