El componente YAML carga y vuelca archivos YAML.
El componente YAML de Symfony2 analiza cadenas YAML para convertirlas en arreglos PHP. También es capaz de convertir arreglos PHP a cadenas YAML.
YAML, YAML no es un lenguaje de marcado, es un estándar para la serialización de datos amigable con los humanos para todos los lenguajes de programación. YAML es un formato ideal para tus archivos de configuración. Los archivos YAML son tan expresivos como los archivos XML y tan fáciles de leer como los archivos INI.
El componente YAML de Symfony2 implementa la versión 1.2 de la especificación YAML.
Truco
Aprende más sobre el componente Yaml en el artículo El formato YAML.
Puedes instalar el componente de varias maneras diferentes:
Uno de los objetivos del componente YAML de Symfony es encontrar el balance adecuado entre características y velocidad. Es compatible con las características necesarias para manipular archivos de configuración.
Este exporta un analizador real y es capaz de analizar un gran subconjunto de especificaciones YAML, para todas tus necesidades de configuración. También significa que el analizador es bastante robusto, fácil de entender, y lo suficientemente simple como para ampliarlo.
Cada vez que tienes un problema de sintaxis con tus archivos YAML, la biblioteca genera un útil mensaje de ayuda con el nombre y número de línea donde está el problema. Lo cual facilita mucho la depuración.
También es capaz de volcar arreglos de PHP a YAML con apoyo a objetos, y el nivel de configuración en línea es bastante bueno.
Es compatible con la mayoría de los tipos YAML integrados como fechas, números enteros, octales, booleanos, y mucho más...
Completa compatibilidad para referencias, alias y completa fusión de claves. No repitas tú mismo haciendo referencia a segmentos de configuración comunes.
El componente YAML de Symfony2 es muy simple y consiste de dos clases principales: una analiza cadenas YAML (Symfony\Component\Yaml\Parser), y la otra vuelca un array PHP en una cadena YAML (Symfony\Component\Yaml\Dumper).
Además de estas dos clases, la clase Symfony\Component\Yaml\Yaml actúa como un delgado contenedor que simplifica los usos más comunes.
El método parse() analiza una cadena YAML y la convierte en un arreglo PHP:
use Symfony\Component\Yaml\Parser;
$yaml = new Parser();
$value = $yaml->parse(file_get_contents('/ruta/a/file.yml'));
Si ocurre un error durante el análisis, el analizador lanza una excepción Symfony\Component\Yaml\Exception\ParseException que indica el tipo de error y la línea en la cadena YAML original en la que ocurrió el error:
use Symfony\Component\Yaml\Exception\ParseException;
try {
$value = $yaml->parse(file_get_contents('/ruta/a/file.yml'));
} catch (ParseException $e) {
printf("Unable to parse the YAML string: %s", $e->getMessage());
}
Truco
Debido a que el analizador es reentrante, puedes utilizar el mismo objeto analizador para cargar diferentes cadenas YAML.
Al cargar un archivo YAML, a veces es mejor usar el contenedor del método parse():
use Symfony\Component\Yaml\Yaml;
$yaml = Yaml::parse('/ruta/a/file.yml');
El método estático parse() toma una cadena YAML o un archivo que contiene YAML. Internamente, llama al método parse(), pero mejora el error si algo sale mal, añadiendo el nombre del archivo al mensaje.
El método dump() vuelca cualquier arreglo PHP en su representación YAML:
use Symfony\Component\Yaml\Dumper;
$array = array(
'foo' => 'bar',
'bar' => array('foo' => 'bar', 'bar' => 'baz'),
);
$dumper = new Dumper();
$yaml = $dumper->dump($array);
file_put_contents('/ruta/a/file.yml', $yaml);
Nota
Por supuesto, el vertedor YAML de Symfony2 no es capaz de volcar recursos. Por otra parte, aun y cuando el vertedor es capaz de volcar objetos PHP, se considera como una función No admitida.
Si ocurre un error durante el volcado, el analizador lanza una excepción Symfony\Component\Yaml\Exception\DumpException.
Si sólo necesitas volcar un arreglo, puedes utilizar el método estático dump():
use Symfony\Component\Yaml\Yaml;
$yaml = Yaml::dump($array, $inline);
El formato YAML admite dos tipos de representación de arreglos, la ampliada, y en línea. Por omisión, el vertedor utiliza la representación en línea:
{ foo: bar, bar: { foo: bar, bar: baz } }
El segundo argumento del método dump() personaliza el nivel en el cual el resultado cambia de la representación ampliada a en línea:
echo $dumper->dump($array, 1);
foo: bar
bar: { foo: bar, bar: baz }
echo $dumper->dump($array, 2);
foo: bar
bar:
foo: bar
bar: baz