Làm thế nào tôi có thể ngăn chặn một trang cụ thể được lưu trữ?


14

Tôi đã kích hoạt bộ đệm trên trang web Drupal 8 của mình và tất nhiên tất cả các trang đều được lưu trong bộ nhớ cache như mong đợi.

Tuy nhiên, tôi muốn có một trang cụ thể bỏ qua bộ đệm đó.

Trong bộ điều khiển của tôi, tôi đã xây dựng trang như sau:

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

Làm thế nào tôi có thể nói với Drupal không lưu trữ trang của tôi?

Câu trả lời:


31

Đối với Drupal 7:

Drupal có chức năng drupal_page_is_cachizable () có thể được sử dụng để đặt một trang thành không thể truy cập.

Dưới đây là tài liệu: https://api.drupal.org/api/drupal/includes!bootstrap.inc/feft/drupal_page_is_cachizable/7

Đối với Drupal 8:

// Deny any page caching on the current request.    
\Drupal::service('page_cache_kill_switch')->trigger();

Sau đó, mã là:

public function myPage() {
  \Drupal::service('page_cache_kill_switch')->trigger();
  return [
    '#markup' => time(),
  ];
}

Như thường lệ, làm sạch bộ nhớ cache của bạn sau khi thực hiện.


19

Vô hiệu hóa bộ đệm cho một trang cụ thể

Vô hiệu hóa bộ đệm cho một trang tùy chỉnh từ khai báo tuyến đường. Nếu bạn muốn tắt bộ đệm cho bộ điều khiển tùy chỉnh (Mô-đun tùy chỉnh), Bạn có no_cachetùy chọn (YOU_MODULE.routing.yml). Ví dụ: Tệp: 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'

Đã thêm tùy chọn tuyến 'no_cache' để đánh dấu phản hồi của tuyến là không thể truy cập


11

Trong Drupal 8, bạn có thể đề cập đến bộ đệm ở độ tuổi tối đa cho đến khi bạn muốn lưu lượng truy cập trang của mình được lưu vào bộ đệm. Để xóa bộ nhớ cache của một trang cụ thể (Trang điều khiển), hãy viết 'max-age' => 0,.

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

2

Nếu bạn cần làm gì đó với mô-đun contrib, bạn có thể sử dụng RouteSubscacker để khắc phục sự cố bộ đệm. bạn cần một dịch vụ ... hoặc chỉ chạy drupal grnếu có bảng điều khiển 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);
  }
 }
}

để biết thêm thông tin, hãy xem https://www.drupal.org/docs/8/api/routing-system/altering-ex hiện-reeses-and-advding-new-outes-based-on -dynamic -ones


1

Bạn có thể sử dụng mô-đun này để tránh bộ đệm drupal và cả bộ đệm phía máy chủ như véc ni https://www.drupal.org/project/ape

Nó hoạt động với tôi trong bộ nhớ cache Varnish trên máy chủ quen thuộc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.