Điểm:0

Nơi xác định quy tắc bộ nhớ đệm thực thể tùy chỉnh của các trang chi tiết

lá cờ cn

Khi bạn có một dự án lớn hơn, bạn có thể có cả bộ đệm trang nội bộ khi bật mô-đun bộ đệm trang động bên trong. Trong trường hợp của tôi, tôi làm. Nhưng tôi có một phần trên trang web của mình có chứa các thực thể tùy chỉnh ('Cuộc thi'), nơi tôi muốn có quyền kiểm soát tùy chỉnh đối với bộ nhớ đệm của trang chi tiết (cuộc thi/1). Đây là những gì tôi tìm thấy cho đến nay:

/**
 * Triển khai hook_entity_view_alter()
 * Vô hiệu hóa bộ nhớ đệm trên tất cả các loại thực thể cuộc thi
 */
function mymodule_entity_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  $types = ['cuộc thi'];
  if (in_array($entity->bundle(), $types)) {
    $build['#cache']['max-age'] = 0;
    \Drupal::service('page_cache_kill_switch')->trigger();
  }
}

đây có phải cách duy nhất không? Tôi mong đợi để có một cách sạch sẽ hơn, trong tôi Cuộc thi.php có lẽ? Mong câu trả lời có thể!

4uk4 avatar
lá cờ cn
Không rõ bạn đang hỏi gì. Bộ đệm trang động tôn trọng max-age = 0, vì vậy không có cách nào rõ ràng hơn để tắt nó. Ý bạn là [Bộ nhớ đệm trang nội bộ](https://www.drupal.org/docs/administering-a-drupal-site/internal-page-cache)? Chỉ khi bạn đã kích hoạt mô-đun này, bạn mới cần thêm khóa chuyển đổi. Hay ý bạn là các tiêu đề phản hồi để kiểm soát bộ đệm của trình duyệt?
Stef Van Looveren avatar
lá cờ cn
Cảm ơn vì đã trả lời. Xin lỗi, ý tôi là cả cache trang nội bộ như Internal Dynamic Page Cache. Hãy xem xét cả hai mô-đun được kích hoạt. Tôi chỉ tự hỏi liệu có cách nào khác để xác định bộ nhớ đệm của các trang chi tiết thực thể tùy chỉnh hay không.
4uk4 avatar
lá cờ cn
Có nhiều điều không rõ ràng. Mã của bạn đang kiểm tra gói, nhưng có vẻ như bạn muốn kiểm tra `getEntityTypeId()`. Nếu trường hợp này xảy ra, bạn có thể thêm tùy chọn `no_cache: TRUE` vào các tuyến thực thể (route_provider trong lớp thực thể của bạn **Cuộc thi**).
Stef Van Looveren avatar
lá cờ cn
Câu trả lời đúng dưới đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn.
Điểm:2
lá cờ cn

Tôi chỉ tự hỏi liệu có cách nào OO hơn để xác định bộ nhớ đệm không của các trang chi tiết thực thể tùy chỉnh.

Điều này sẽ mở rộng nhà cung cấp tuyến đường mà bạn đang sử dụng (DefaultHtmlRouteProvider hoặc AdminHtmlRouteProvider), chỉ định nó trong lớp thực thể tùy chỉnh

* "tuyến_nhà cung cấp" = {
* "html" = "Drupal\mymodule\MyEntityRouteProvider",
* },

và ghi đè getCanonicalRoute để thêm tùy chọn no_cache:

chức năng được bảo vệ getCanonicalRoute(EntityTypeInterface $entity_type) {
  $route = parent::getCanonicalRoute($entity_type);
  $route->setOption('no_cache', TRUE);
  trả lại tuyến đường $;
}
Stef Van Looveren avatar
lá cờ cn
Tuyệt quá. Tôi không biết điều này. Cảm ơn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.