Antes de empezar a crear los primeros archivos YAML, existen algunos trucos muy útiles que es conveniente aprender. Estos trucos permiten evitar la duplicidad de la configuración y permiten personalizar el formato YAML.
Algunas opciones de configuración dependen del valor de otras opciones. Para evitar escribir 2 veces el mismo valor, Symfony permite definir constantes dentro de los archivos YAML. Si el manejador de los archivos se encuentra con un nombre de opción todo en mayúsculas y encerrado entre los símbolos % y %, lo reemplaza por el valor que tenga en ese momento. El listado 5-20 muestra un ejemplo.
Listado 5-20 - Uso de constantes en los archivos YAML, ejemplo extraído del archivo autoload.yml
autoload:
symfony:
name: symfony
path: %SF_SYMFONY_LIB_DIR%
recursive: on
exclude: [vendor]El valor de la opción path es el que devuelve en ese momento la llamada a sfConfig::get('sf_symfony_lib_dir'). Si un archivo de configuración depende de otro archivo, es necesario que el archivo del que se depende sea procesado antes (en el código de Symfony se puede observar el orden en el que se procesan los archivos de configuración). El archivo app.yml es uno de los últimos que se procesan, por lo que sus opciones pueden depender de las opciones de otros archivos de configuración.
Puede ocurrir que los archivos de configuración dependan de parámetros externos (como por ejemplo una base de datos u otro archivo de configuración). Para poder procesar este tipo de casos, Symfony procesa los archivos de configuración como si fueran archivos de PHP antes de procesarlos como archivos de tipo YAML. De esta forma, como se muestra en el listado 5-21, es posible incluir código PHP dentro de un archivo YAML:
Listado 5-21 - Los archivos YAML puede contener código PHP
all:
traduccion:
formato: <?php echo (sfConfig::get('sf_i18n') == true ? 'xliff' : 'none')."\n" ?>El único inconveniente es que la configuración se procesa al principio de la ejecución de la petición del usuario, por lo que no están disponibles ninguno de los métodos y funciones de Symfony.
Además, como la instrucción echo no añade ningún retorno de carro por defecto, es necesario añadirlo explícitamente mediante \n o mediante el uso del helper echoln para cumplir con el formato YAML:
all:
traduccion:
formato: <?php echoln sfConfig::get('sf_i18n') == true ? 'xliff' : 'none' ?>Recuerda que en el entorno de producción, se utiliza una cache para la configuración, por lo que los archivos de configuración solamente se procesan (y en este caso, se ejecuta su código PHP) una vez después de borrar la cache.
La clase sfYaml permite procesar de forma sencilla cualquier archivo en formato YAML. Se trata de un procesador (parser) de archivos YAML que los convierte en arrays asociativos de PHP. El listado 5-22 muestra un archivo YAML de ejemplo y el listado 5-23 muestra como transformarlo en código PHP:
Listado 5-22 - Archivo de prueba llamado prueba.yml
casa:
familia:
apellido: García
padres: [Antonio, María]
hijos: [Jose, Manuel, Carmen]
direccion:
numero: 34
calle: Gran Vía
ciudad: Cualquiera
codigopostal: 12345Listado 5-23 - Uso de la clase sfYaml para transformar el archivo YAML en un array asociativo
$prueba = sfYaml::load('/ruta/a/prueba.yml'); print_r($prueba); Array( [casa] => Array( [familia] => Array( [apellido] => García [padres] => Array( [0] => Antonio [1] => María ) [hijos] => Array( [0] => Jose [1] => Manuel [2] => Carmen ) ) [direccion] => Array( [numero] => 34 [calle] => Gran Vía [ciudad] => Cualquiera [codigopostal] => 12345 ) ) )
Capítulo original en inglés Chapter 5 - Configuring Symfony Traducido por Javier Eguíluz