Ich versuche, einen KernelEvents :: REQUEST-Ereignisabonnenten zu implementieren, um beim Laden der Seite eine Aktion auszuführen.
Dieses Ereignis muss ausgelöst werden, unabhängig davon, ob die angeforderte Seite im Drupal-Cache vorhanden ist. KernelEvents :: REQUEST wird anscheinend nicht ausgelöst, wenn Drupal etwas aus dem Cache bereitstellt.
Gibt es ein Ereignis, mit dem ich dies erreichen kann, oder muss ich meine Anforderungen als eine Art Middleware implementieren?
8
event-subscriber
kiamlaluno
quelle
quelle
Antworten:
Der dynamische Cache abonniert ein Ereignis mit Priorität 27. Wenn Sie möchten, dass Ihr Code zuvor ausgeführt wird, müssen Sie eine Priorität> 27 verwenden:
Welches läuft DynamicPageCacheSubscriber :: onRequest ..
quelle
['checkForRediret', 30];
hat es wie erwartet funktioniert.Drupal 8 verfügt über einen Cache mit zwei Ebenen, einen Seitencache und einen dynamischen Seitencache.
Ja, Sie können den dynamischen Seitencache wie in @ 4k4 erwähnt abfangen. Es ist wahrscheinlicher, dass das Problem den Seitencache abfängt. Der Schlüssel ist hier drin .
Hierfür gibt es einige Lösungen:
Fügen Sie eine neue Klasse hinzu, die 'HttpKernelInterface' implementiert, und registrieren Sie 'http_middleware' mit einer höheren Priorität als 200 (280 reicht aus). Referenzen finden Sie unter 'PageCache'-Klasse und Implementierungen.
Erstellen Sie eine neue Klasse, um den vorhandenen 'PageCache' durch Erweitern von 'ServiceProviderBase' zu ändern. Überprüfen Sie dies für Referenzen hier . Erstellen Sie dann eine neue Klasse, um den 'PageCache' zu erweitern.
Hier sind Code-Referenzen:
Dies ist StaticCacheServiceProvider.php:
Dies ist StaticCache.php:
Hoffnung hilft.
quelle