WEBcoast Logo

Automatisch den Cache löschen, wenn ein Datensatz bearbeitet wird

In einem aktuellen Projekt sollte der Cache für Seiten gelöscht werden, auf denen bestimmte Datensätze angezeigt werden, sobald einer der angezeigten Datensätze bearbeitet wurde. Im konkreten Fall ging es im Kurse und die dazu gehörenden Kurstermine

Ich fand heraus, dass TYPO3 eine entsprechende Logik bereits eingebaut hat. Wenn Datensätze gespeichert, versteckt oder aktiviert werden, löscht TYPO3 automatisch die Caches basierend auf den Cache-Tags aus dem Tabellen-Namen und der UID: `{tabelle}_{uid}`. Das einzige was ich also machen musste, war meinen Controller-Code entsprechend um das Hinzufügen der Cache-Tags zu ergänzen:

class CourseController extends ActionController {
    ...

    public function listAction() {
        $cacheTags = [];

        // Fetch all courses
        $courses = $this->courseRepository->findAll();

        // Build cache tags
        foreach ($courses as $course) {
            $cacheTags[] = 'tx_course_domain_model_course_' . $course->getUid();
        }

        // Add cache tags to page cache
        $this->getTypoScriptFrontendController()->addCacheTags($cacheTags);

        $this->view->assign('courses', $courses);
    }

    ...

    /**
     * @return TypoScriptFrontendController
     */
    protected function getTypoScriptFrontendController(): TypoScriptFrontendController
    {
        return $GLOBALS['TSFE'];
    }
    
    ...
}

Getestet wurde das mit TYPO3 CMS 10.4.