Ver índice de contenidos del libro

12.4. La cache de Symfony

Si eres de los que sienten curiosidad por cómo funcionan las cosas, seguramente ya has abierto los archivos generados por la tarea propel:generate-admin en el directorio apps/backend/modules/. Si no lo habías hecho, este es el momento de hacerlo. ¡Sorpresa! Los directorios templates están vacíos y los archivos actions.class.php también están casi vacíos:

// apps/backend/modules/job/actions/actions.class.php
require_once dirname(__FILE__).'/../lib/jobGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/jobGeneratorHelper.class.php';
 
class jobActions extends autoJobActions
{
}

¿Cómo es posible que funcionen estos módulos? Si te fijas con atención, verás que la clase jobActions hereda de la clase autoJobActions. Si esta clase autoJobActions no existe, Symfony la genera automáticamente. En realidad, esta clase se encuentra en el directorio cache/backend/dev/modules/autoJob/, que contiene los archivos verdaderos del módulo:

// cache/backend/dev/modules/autoJob/actions/actions.class.php
class autoJobActions extends sfActions
{
  public function preExecute()
  {
    $this->configuration = new jobGeneratorConfiguration();
 
    if (!$this->getUser()->hasCredential(
      $this->configuration->getCredentials($this->getActionName())
    ))
    {
 
// ...

El funcionamiento del generador de la parte de administración te debería resultar familiar. En realidad, su funcionamiento es muy similar al de las clases del modelo y de los formularios. En base a la definición del esquema de datos, Symfony genera las clases del modelo y de los formularios. En el caso del generador de la parte de administración, el módulo generado automáticamente se configura modificando el archivo config/generator.yml que se encuentra dentro del propio módulo:

# apps/backend/modules/job/config/generator.yml
generator:
  class: sfPropelGenerator
  param:
    model_class:           JobeetJob
    theme:                 admin
    non_verbose_templates: true
    with_show:             false
    singular:              ~
    plural:                ~
    route_prefix:          jobeet_job
    with_propel_route:     1

    config:
      actions: ~
      fields:  ~
      list:    ~
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~

Cada vez que modificas el archivo generator.yml, Symfony regenera su cache. Como veremos en el resto de secciones, personalizar un módulo de administración generado automáticamente es muy sencillo, rápido y hasta divertido.

Nota La regeneración automática de los archivos de la cache sólo se realiza en el entorno de desarrollo. En el entorno de producción, debes borrar la cache manualmente mediante la tarea cache:clear.