Я работаю с модулем Mobile Detect, и, насколько я понимаю, нам нужно вручную добавить контекст кеша. mobile_detect_is_mobile
чтобы страница кэшировалась по-разному в зависимости от типа пользовательского устройства. Я смог заставить его работать, применив контекст кеша, используя предварительную обработку моего абзаца следующим образом:
функция hook_preprocess_paragraph(&$variables){
$variables['#cache']['contexts'][] = 'mobile_detect_is_mobile';
}
Хотя мне не нравится идея добавления контекста на уровне предварительной обработки, и я искал более глобальное решение, используя EventSubscriber, который проверяет путь и применяет контекст кеша для определенных путей. Похоже, что контекст кеша не принимается во внимание. Вот мой EventSubscriber:
класс MobileDetectSubscriber реализует EventSubscriberInterface {
/**
* @var\Symfony\Component\HttpFoundation\Request
*/
защищенный $запрос;
/**
* @param\Symfony\Component\HttpFoundation\RequestStack $request_stack
*/
общедоступная функция __construct (RequestStack $ request_stack) {
$this->request = $request_stack->getCurrentRequest();;
}
/**
* @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
* Событие для обработки.
*/
публичная функция onRespond (FilterResponseEvent $event) {
если (!$событие
->isMasterRequest()) {
возвращаться;
}
$ответ = $событие
->получитьответ();
if (!$response instanceof CacheableResponseInterface) {
возвращаться;
}
если($this->request->getRequestUri() == "/"){
$mobile_detect = новые CacheableMetadata();
$mobile_detect->setCacheContexts(['mobile_detect_is_mobile']);
$response->addCacheableDependency($mobile_detect);
}
}
/**
* @возвратный массив
* Массив определений слушателей событий.
*/
общедоступная статическая функция getSubscribedEvents() {
// Приоритет 5, чтобы он выполнялся до FinishResponseSubscriber, но после
// подписчики событий, которые добавляют соответствующие метаданные кэшируемости (которые
// иметь приоритет 10). Это условно, поэтому нужно бежать за ними.
$events[KernelEvents::RESPONSE][] = ['onRespond', 5];
вернуть $события;
}
}
Что мне не хватает?