Я пытаюсь реализовать подписчик события KernelEvents :: REQUEST для выполнения некоторых действий при загрузке страницы.
Мне нужно, чтобы это событие запускалось независимо от того, существует ли запрашиваемая страница в кэше Drupal - кажется, что KernelEvents :: REQUEST не запускается, когда Drupal обслуживает что-то из кэша.
Есть ли событие, которое я могу использовать для достижения этой цели, или я должен реализовать свои требования в качестве некоторого промежуточного программного обеспечения?
8
event-subscriber
киамлалуно
источник
источник
Ответы:
Динамический кеш подписывается на событие с приоритетом 27. Если вы хотите, чтобы ваш код выполнялся до этого, вы должны использовать приоритет> 27:
Который запускает DynamicPageCacheSubscriber :: onRequest ..
источник
['checkForRediret', 30];
он работал как ожидалось.Drupal 8 имеет двухуровневый кеш, кеш страниц и динамический кеш страниц.
Да, вы можете перехватить динамический кеш страниц как упомянутое @ 4k4. Проблема, с которой вы столкнулись, скорее всего перехватит кеш страниц. Ключ здесь .
Есть несколько решений для этого:
Добавьте новый класс, который реализует 'HttpKernelInterface' и зарегистрируйте 'http_middleware' с более высоким приоритетом, чем 200 (280 будет делать). См. Класс 'PageCache' и реализации для ссылок.
Создайте новый класс для изменения существующего «PageCache» путем расширения из «ServiceProviderBase». Проверьте это для ссылок здесь . Затем создайте новый класс для расширения «PageCache».
Вот ссылки на код:
Это StaticCacheServiceProvider.php:
Это StaticCache.php:
Надежда помогает.
источник