Tôi đang làm việc với mô-đun Mobile Detect và theo những gì tôi hiểu, chúng tôi cần thêm bối cảnh bộ đệm theo cách thủ công mobile_detect_is_mobile
để trang được lưu vào bộ nhớ cache khác nhau dựa trên loại thiết bị người dùng. Tôi đã có thể làm cho nó hoạt động bằng cách áp dụng bối cảnh bộ đệm bằng cách sử dụng tiền xử lý trên đoạn văn của mình như sau:
hàm hook_pre process_paragraph(&$variables){
$variables['#cache']['contexts'][] = 'mobile_detect_is_mobile';
}
Mặc dù, tôi không thích ý tưởng thêm ngữ cảnh ở cấp độ tiền xử lý và tôi đang tìm giải pháp toàn cầu hơn bằng cách sử dụng EventSubscriber để kiểm tra đường dẫn và áp dụng ngữ cảnh bộ đệm cho các đường dẫn cụ thể. Có vẻ như bối cảnh bộ đệm không được xem xét. Đây là EventSubscriber của tôi:
lớp MobileDetectSubscriber triển khai EventSubscriberInterface {
/**
* @var \Symfony\Component\HttpFoundation\Request
*/
yêu cầu $ được bảo vệ;
/**
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
*/
hàm công khai __construct(RequestStack $request_stack) {
$this->request = $request_stack->getCurrentRequest();;
}
/**
* @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
* Sự kiện cần xử lý.
*/
hàm công khai onRespond(FilterResponseEvent $event) {
nếu (!$sự kiện
->isMasterRequest()) {
trở lại;
}
$ phản hồi = $ sự kiện
->getResponse();
if (!$response instanceof CacheableResponseInterface) {
trở lại;
}
if($this->request->getRequestUri() == "/"){
$mobile_detect = CacheableMetadata mới();
$mobile_detect->setCacheContexts(['mobile_detect_is_mobile']);
$response->addCacheableDependency($mobile_detect);
}
}
/**
* @return mảng
* Một loạt các định nghĩa người nghe sự kiện.
*/
hàm tĩnh công khai getSubscribeEvents() {
// Ưu tiên 5, để nó chạy trước FinishResponseSubscriber, nhưng sau
// người đăng ký sự kiện thêm siêu dữ liệu lưu vào bộ nhớ đệm được liên kết (mà
// có ưu tiên 10). Cái này có điều kiện nên phải chạy theo cái kia.
$events[KernelEvents::RESPONSE][] = ['onRespond', 5];
trả lại sự kiện $;
}
}
Tôi đang thiếu gì?