Ver índice de contenidos del libro

22.8. Borrando la cache

Cuando el usuario publica una nueva oferta de trabajo o cuando activa una oferta existente, debemos refrescar la portada de Jobeet para que se muestre en el listado de ofertas de trabajo.

Como no necesitamos que las ofertas de trabajo aparezcan en tiempo real en la portada, vamos a seguir la estrategia de reducir el tiempo de vida de la cache a un valor más aceptable:

# plugins/sfJobeetJob/modules/sfJobeetJob/config/cache.yml
index:
  enabled:  on
  lifetime: 600

Mientras que el valor por defecto hace que la cache se guarde durante un día completo, la configuración anterior hace que la portada de Jobeet se borre de la cache cada diez minutos.

No obstante, si quieres actualizar la portada cada vez que un usuario activa una oferta de trabajo, modifica el método executePublish() del módulo sfJobeetJob para borrar la cache manualmente:

// plugins/sfJobeetJob/modules/sfJobeetJob/actions/actions.class.php
public function executePublish(sfWebRequest $request)
{
  $request->checkCSRFProtection();
 
  $job = $this->getRoute()->getObject();
  $job->publish();
 
  if ($cache = $this->getContext()->getViewCacheManager())
  {
    $cache->remove('sfJobeetJob/index?sf_culture=*');
    $cache->remove('sfJobeetCategory/show?id='.$job->getJobeetCategory()->getId());
  }
 
  $this->getUser()->setFlash('notice', sprintf('Your job is now online for %s days.', sfConfig::get('app_active_days')));
 
  $this->redirect($this->generateUrl('job_show_user', $job));
}

La cache se gestiona mediante la clase sfViewCacheManager, cuyo método remove() borra la cache asociada con la URI interna indicada. Si quieres eliminar la cache para todos los posibles valores de una variable, utiliza * como valor. El valor sf_culture=* utilizado en el ejemplo anterior significa que Symfony elimina de la cache tanto la portada en inglés como la portada en francés.

El borrado de la cache lo hemos incluido dentro de un bloque if() porque el gestor de la cache vale null cuando la cache se encuentra deshabilitada.