Prinzipiell geht es mir darum, dass ich im Frontend für das Listing einen Aggregat Query ausführe, den ich bereits schon gecacht habe. Ich müsste jetzt nur noch an den richtigen Stellen den Cache invalidieren.
Mein Code dazu sieht bisher so aus:
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatch_Backend_Article' => 'onArticleSave',
'Enlight_Controller_Action_PostDispatch_Api_Article' => 'onArticleSave',
'Enlight_Controller_Action_PostDispatch_Backend_Category' => 'onArticleSave'
];
}
public function onArticleSave(\Enlight_Event_EventArgs $args)
{
/**
* @var \Zend_Cache_Core $cache
*/
$cache = $this->container->get('cache');
$cache->clean(\Zend_Cache::CLEANING_MODE_OLD);
list($controller, $view, $request) = self::getEverythingFromArgs($args);
$actionName = strtolower($request->getActionName());
$invalidatingActions = array(
'save', // api and backend
'delete', // api and backend
'deletevariants',
'deletedetail',
'post', // api and backend
'put', // api and backend
'removecategoryarticles',
'addcategoryarticles'
);
if (in_array($actionName, $invalidatingActions)) {
$cacheIds = $cache->getIdsMatchingTags(array(self::ART_CNT_CACHE_TAG));
if (is_array($cacheIds) && count($cacheIds) <= 1) {
foreach ($cacheIds as $cacheId) {
if (!$cache->remove($cacheId)) {
throw new \RuntimeException('Cache konnte nicht geleert werden. Artikel Anzahl in der Auflisting ist wahrscheinlich falsch.');
}
}
}
}
}
Vielleicht gibt es auch eine andere Möglichkeit mein Problem zu lösen. Zusammenfassend lässt sich denke ich sagen, dass ich Doctrine, sArticle, Backend, Api, und Elasticsearch abfangen muss, oder?