Estou tentando implementar um assinante de evento KernelEvents :: REQUEST para executar alguma ação no carregamento da página.
Eu preciso que esse evento seja acionado, independentemente de a página solicitada existir no cache do Drupal - parece que o KernelEvents :: REQUEST não é acionado quando o Drupal serve algo do cache.
Existe um evento que eu possa usar para conseguir isso ou devo implementar meus requisitos como alguma forma de middleware?
8
event-subscriber
kiamlaluno
fonte
fonte
Respostas:
O cache dinâmico assina um evento com prioridade 27. Se você deseja que seu código seja executado antes disso, use uma prioridade> 27:
Que executa DynamicPageCacheSubscriber :: onRequest ..
fonte
['checkForRediret', 30];
, funcionou como esperado.O Drupal 8 possui cache de dois níveis, cache de página e cache dinâmico de páginas.
Sim, você pode interceptar o cache da página dinâmica conforme mencionado em @ 4k4. O problema que você está tendo é mais provável de interceptar o cache da página. A chave está aqui .
Existem algumas soluções para isso:
Adicione uma nova classe que implemente 'HttpKernelInterface' e registre 'http_middleware' com prioridade mais alta que 200 (o que é o caso de 280). Consulte a classe e implementações 'PageCache' para obter referências.
Crie uma nova classe para alterar o 'PageCache' existente estendendo-se de 'ServiceProviderBase'. Verifique isso para referências aqui . Em seguida, crie uma nova classe para estender o 'PageCache'.
Aqui estão as referências de código:
Este é StaticCacheServiceProvider.php:
Este é StaticCache.php:
A esperança ajuda.
fonte