Hallo,
ich möchte eine konkrete CMS-Seite aus dem Cache löschen bzw. von vornherein verhindern, dass diese Seite in „prod“ gecached wird.
Hintergrund ist, dass auf der Seite ein eigenes CMS-Element ist, welches Daten von einer externen API einliest. Der Abruf der Daten unterscheidet sich inhaltlich, wenn der Nutzer angemeldet ist, oder nicht. Wenn der Nutzer sich zwischenzeitlich an- oder abmeldet, wird die Seite aber immer aus dem Cache geholt, was zu falschen Inhalten führt (zumindest in „prod“).
Da ich keine Stelle kenne, wo man einstellen kann, dass eine Seite nicht gecached werden soll, verfolge ich aktuell den folgenden Ansatz:
class CacheSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
HttpCacheItemWrittenEvent::class => 'onHttpCacheItemWrittenEvent'
];
}
public function onHttpCacheItemWrittenEvent(HttpCacheItemWrittenEvent $event): void
{
if (in_array('cms-page-6649bcc2caf84a0baf1dff814326daa1', $event->getTags())) {
error_log($event->getItem()->getKey());
}
}
}
Der Subscriber triggert den Moment, nachdem die betroffene CMS-Seite in den Cache geschrieben wurde. Dadurch kann ich den entsprechenden Schlüssel ermitteln.
Aber wie kann ich nun den Eintrag aus dem Cache entfernen? Noch besser wäre natürlich direkt zu verhindern, dass die Seite in den Cache wandert. Da habe ich aber kein Ereignis gefunden.
Viele Grüße, Frank