Tôi phải thêm bối cảnh bộ đệm mới cho thực thể ở đâu?


9

Tôi chưa thể thêm bối cảnh bộ đệm để hoạt động cho các thực thể trong drupal 8. Cụ thể tôi sẽ dành cho các tiêu đề: Tác nhân người dùng. Tôi đã thử nhiều biến thể sau đây trong một mô-đun.

 use Drupal\node\NodeInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;

 function hook_entity_view_alter(&$build, EntityInterface $entity, EntityViewDisplayInterface $display){
   if($entity->getType() == 'relevant_type'){
    $build['#cache']['contexts'][] = 'headers:User-Agent';
   }

 }

Tôi đang cố gắng kiểm tra quyền truy cập nút khi bối cảnh đó thay đổi. Tôi cũng đã thử nó trong hook_entity_build_defaults_alter()chức năng.


Lưu ý rằng bối cảnh bộ đệm không ảnh hưởng đến truy cập nút mà người dùng có. Bối cảnh bộ đệm chỉ để thay đổi khi dữ liệu được lưu trữ.
kiamlaluno

Truy cập nút như được đặt trong hook_node_access được lưu trữ.
ummdorian

Đó là một thùng bộ đệm khác nhau, không phải là bộ đệm được sử dụng cho nội dung.
kiamlaluno

Xem các lớp triển khai \ Drupal \ Core \ Cache \ Context \ CacheContextInterface

Câu trả lời:


6

Bạn thực sự nên sử dụng hook_entity_build_defaults_alter(). Tài liệu của nó thậm chí còn tuyên bố rõ ràng điều này:

Thay đổi giá trị thực thể thay đổi trước khi kiểm tra bộ đệm trong drupal numnder ().

Các giá trị trong #cachekhóa của mảng kết xuất được sử dụng để xác định xem mục nhập bộ đệm có tồn tại cho đầu ra được kết xuất của thực thể hay không. Tốt nhất chỉ nên thay đổi các giá trị liên quan đến bộ nhớ đệm trong hook này.

Nó có thể không hoạt động với bạn vì bạn đã quên xóa bộ đệm kết xuất sau khi thực hiện hook đó.

Móc đó được gọi trong https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21EntityViewBuilder.php/ class / EntityViewBuilder / 8

Ngoài ra, hãy xem https://www.drupal.org/developing/api/8/cache/contexts để biết tổng quan về bối cảnh bộ đệm (chúng là gì, làm thế nào để sử dụng chúng, những gì cốt lõi đi kèm).

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.