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.
5.6.1. Uso de constantes en los archivos de configuración 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.
5.6.2. Uso de programación en los 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' ?>
Advertencia 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.
5.6.3. Utilizar tu propio archivo YAML
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: 12345
Listado 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
)
)
)