Más con Symfony

14.5. La cache de configuración

La cache de configuración está compuesta por una colección de clases que optimizan el uso de archivos de configuración YAML automatizando su conversión en código PHP y guardando ese código en el directorio de la cache para ejecutarlo. Este mecanismo hace innecesario cargar los contenidos de nuestros archivos de configuración en objetos sfYaml antes de aplicar sus valores.

A continuación se añade la cache de configuración en nuestra solución para mejorar los formularios. En lugar de cargar los archivos forms.yml en objetos sfYaml, se va a solicitar la versión pre-procesada de estos archivos a la cache de configuración de la aplicación actual.

Para ello la clase sfFormYamlEnhancer necesita acceder a la cache de configuración de la aplicación actual, así que vamos a incluirla en el constructor.

class sfFormYamlEnhancer
{
  protected
    $configCache = null;

  public function __construct(sfConfigCache $configCache)
  {
    $this->configCache = $configCache;
    $this->configCache->registerConfigHandler('config/forms.yml',
      'sfSimpleYamlConfigHandler');
  }

  // ...
}

A la cache de configuración se le debe indicar qué hacer cuando la aplicación solicita un determinado archivo de configuración. Por el momento, el código indica a la cache de configuración que utilice sfSimpleYamlConfigHandler para procesar el archivo forms.yml. Este gestor de configuración simplemente procesa el archivo YAML, lo convierte en un array y lo guarda en la cache como código PHP.

Una vez que se ha añadido la cache de configuración y se ha registrado un gestor de configuración para forms.yml, ya se puede hacer uso de ellos en lugar de sfYaml:

public function enhance(sfForm $form)
{
  $config = include $this->configCache->checkConfig('config/forms.yml');

  // ...
}

Esta solución es mucho mejor. No sólo se ha eliminado la necesidad de procesar los archivos YAML (salvo en la primera petición) sino que también se hace uso de la instrucción include() de PHP para poder aprovechar los sistemas de cache de PHP.