Saya mencoba menerapkan pelanggan acara KernelEvents :: REQUEST untuk melakukan beberapa tindakan pada pemuatan halaman.
Saya perlu acara ini untuk memecat terlepas dari apakah halaman yang diminta ada di cache Drupal - tampaknya KernelEvents :: REQUEST tidak menyala ketika Drupal menyajikan sesuatu dari cache.
Apakah ada acara yang dapat saya gunakan untuk mencapai hal ini, atau haruskah saya menerapkan persyaratan saya sebagai suatu bentuk middleware?
8
event-subscriber
kiamlaluno
sumber
sumber
Jawaban:
Cache dinamis berlangganan acara dengan prioritas 27. Jika Anda ingin kode Anda berjalan sebelum itu Anda harus menggunakan prioritas> 27:
Yang menjalankan DynamicPageCacheSubscriber :: onRequest ..
sumber
['checkForRediret', 30];
maka itu berfungsi seperti yang diharapkan.Drupal 8 memiliki dua level cache, cache halaman dan cache halaman dinamis.
Ya, Anda dapat mencegat cache halaman dinamis seperti yang disebutkan oleh @ 4k4. Masalah yang Anda hadapi lebih cenderung mencegat cache halaman. Kuncinya ada di sini .
Ada beberapa solusi untuk ini:
Tambahkan kelas baru yang mengimplementasikan 'HttpKernelInterface' dan daftarkan 'http_middleware' dengan prioritas lebih tinggi dari 200 (280 akan melakukannya). Lihat kelas 'PageCache' dan implementasi untuk referensi.
Buat kelas baru untuk mengubah 'PageCache' yang ada dengan memperluas dari 'ServiceProviderBase'. Lihat ini untuk referensi di sini . Kemudian, buat kelas baru untuk memperluas 'PageCache'.
Berikut ini adalah referensi kode:
Ini adalah StaticCacheServiceProvider.php:
Ini adalah StaticCache.php:
Semoga bisa membantu.
sumber