Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-11-2009 16:05:19

johny
Nouveau membre
Date d'inscription: 27-11-2009
Messages: 2

[Résolu][Zend_Cache][1.8.4] Invalidation sélective via frontend Class

Bonjour,

J'utilise dans le constructeur de certains de mes models le cache suivant :

Code:

$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 :

Code:

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

 

#2 29-11-2009 16:27:16

johny
Nouveau membre
Date d'inscription: 27-11-2009
Messages: 2

Re: [Résolu][Zend_Cache][1.8.4] Invalidation sélective via frontend Class

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é  :

Code:

$this->_cache->setTagsArray(array($this->cacheId));

à la suite de

Code:

$this->_cache = Zend_Cache::factory('Class', 'File', $frontendOptions, $backendOptions);

L'invalidation se fait ensuit dans les controleurs du backoffice de la façon suivante :

Code:

$currentModel->getCache()->clean(
    Zend_Cache::CLEANING_MODE_MATCHING_TAG,
    array($currentModel->cacheId)
);

Et tout roule !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages