Il vous arrivera d’avoir à nettoyer votre cache sur le frontend depuis une action du backend.
Dans la documentation officielle de Symfony, il suffit d’utiliser ce bout de code:
// Action dans le backend
$frontend_cache_dir = sfConfig::get('sf_cache_dir').DIRECTORY_SEPARATOR.'frontend'. DIRECTORY_SEPARATOR.sfConfig::get('sf_environment').DIRECTORY_SEPARATOR.'template';
$cache = new sfFileCache(array('cache_dir' => $frontend_cache_dir)); // Use the same settings as the ones defined in the frontend factories.yml
$cache->removePattern('user/show?id=12');
Oui mais ce bout de code ne marche pas forcément pour nettoyer un partial sur différents noms de domaines de votre site (s’il est multilingue par exemple). Et là, pas de doc…
Après maintes recherches, je suis tombé sur une alternative qui nous sauve la vie:
// Action dans le backend
sfContext::switchTo('frontend');
if($cache = sfContext::getInstance()->getViewCacheManager())
{
$cache->remove('@sf_cache_partial?module=user&action=_statistics&sf_cache_key='.$comment->getUserId());
}
sfContext::switchTo('backend');
En changeant de contexte, on peut faire le nettoyage du cache de notre partial comme si l’on se trouver sur le frontend, et ce depuis notre backend ! Attention à bien être sur un environnement qui prend en compte le cache (voir tuto jobeet).
En prime, si votre site possède différents noms de domaines pour chacune de vos cultures, vous pouvez choisir de nettoyer ou non le cache de tel nom de domaine en rajoutant l’url en option:
// Action dans le backend sfContext::switchTo('frontend'); if($cache = sfContext::getInstance()->getViewCacheManager()) { // Je passe mon nom de domaine pour le frontend francophone $cache->remove('@sf_cache_partial?module=user&action=_statistics&sf_cache_key='.$comment->getUserId(),"mon_url_fr"); // Je passe mon nom de domaine pour le frontend anglophone $cache->remove('@sf_cache_partial?module=user&action=_statistics&sf_cache_key='.$comment->getUserId(),"mon_url_en"); } sfContext::switchTo('backend');
J’espère que ceux qui ont galéré à trouver de la doc comme moi tomberont sur cet article