Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'utilise dans le constructeur de certains de mes models le cache suivant :
$frontendOptions = array( 'lifetime' => null, 'cached_entity' => $this ); $backendOptions = array('cache_dir' => APPLICATION_PATH . '/tmp/'); $this->_cache = Zend_Cache::factory('Class', 'File', $frontendOptions, $backendOptions);
Et l'appel se fait ainsi pour une méthode sans argument pour simplifier :
public function __call($name, $arguments) { return $this->_cache->$name(); }
Le cache fonctionne parfaitement et une fois la méthode en question appelée, les appels suivant retournent bien la valeur en cache, pour preuve le nombre de requêtes DB en moins dans le profiler.
Mon soucis est le suivant :
Lorsqu'en backoffice je souhaite invalider le cache d'un model donné, l'utilisation de clean() vide tous les caches y compris ceux des autres models.
Vu qu'il n'y a pas de méthode save() sur un cache dont le frontend est de type Class (pas trouvé tout du moins), je n'ai pas saisi comme utiliser une invalidation sélective à l'aide de tag ou d'identifiant.
Si quelqu'un a une idée.
Merci d'avance.
Dernière modification par johny (29-11-2009 16:28:17)
Hors ligne
En allant fouiller directement dans la class Zend_Cache_Frontend_Class, il semblerait que toutes les classes qui étendent de Zend_Cache_Core possèdent la méthode public setTagsArray().
J'ai donc rajouté :
$this->_cache->setTagsArray(array($this->cacheId));
à la suite de
$this->_cache = Zend_Cache::factory('Class', 'File', $frontendOptions, $backendOptions);
L'invalidation se fait ensuit dans les controleurs du backoffice de la façon suivante :
$currentModel->getCache()->clean( Zend_Cache::CLEANING_MODE_MATCHING_TAG, array($currentModel->cacheId) );
Et tout roule !
Hors ligne
Pages: 1