Trabajo con YAML en PHP: biblioteca Symfony Yaml
YAML (YAML Ain't Markup Language) es un formato de serialización de datos que se utiliza a menudo para archivos de configuración, descripción de estructuras de datos e intercambio de información entre servicios. En PHP, existen varias soluciones para trabajar con YAML, pero la más popular y funcional es el componente Symfony Yaml. Proporciona métodos convenientes para analizar (leer) y volcar (escribir) datos YAML, admite todas las especificaciones de YAML 1.2 y está integrado en muchos frameworks, incluidos Laravel y Symfony.
En este artículo, analizaremos en detalle la instalación, las operaciones básicas y las capacidades avanzadas de la biblioteca Symfony Yaml. Aprenderá cómo convertir YAML en arrays de PHP y viceversa, así como cómo manejar estructuras complejas.
Instalación de la biblioteca
Symfony Yaml se instala a través de Composer. Ejecute el comando en la raíz de su proyecto:
composer require symfony/yamlDespués de la instalación, incluya el cargador automático de Composer e importe las clases necesarias:
require 'vendor/autoload.php';
use Symfony\\Component\\Yaml\\Yaml;use Symfony\\Component\\Yaml\\Exception\\ParseException;Operaciones básicas
Análisis de una cadena YAML
El método Yaml::parse() convierte una cadena YAML en un array de PHP. Veamos un ejemplo con una configuración simple:
$yamlString = "database: host: localhost port: 3306 name: mydb user: admin password: secret";
try { $data = Yaml::parse($yamlString); print_r($data);} catch (ParseException $e) { echo 'Error al analizar YAML: ' . $e->getMessage();}Resultado de la ejecución:
Array( [database] => Array ( [host] => localhost [port] => 3306 [name] => mydb [user] => admin [password] => secret ))Análisis de un archivo YAML
La mayoría de las veces, YAML se almacena en archivos. Para leerlos, use file_get_contents() junto con el analizador:
$yamlFile = __DIR__ . '/config.yaml';if (!file_exists($yamlFile)) { die('Archivo de configuración no encontrado');}
try { $config = Yaml::parse(file_get_contents($yamlFile)); echo 'Host de la base de datos: ' . $config['database']['host'];} catch (ParseException $e) { echo 'Error al leer el archivo: ' . $e->getMessage();}Volcado (escritura) a YAML
El método Yaml::dump() convierte un array de PHP de vuelta a una cadena YAML. Esto es útil para generar configuraciones o exportar datos:
$data = [ 'app' => [ 'name' => 'MyApp', 'version' => '1.0.0', 'debug' => true, 'modules' => ['auth', 'api', 'admin'] ]];
$yamlOutput = Yaml::dump($data, 3); // El segundo parámetro es el nivel de anidamientofile_put_contents('app_config.yaml', $yamlOutput);echo $yamlOutput;Resultado en el archivo:
app: name: MyApp version: '1.0.0' debug: true modules: - auth - api - adminCapacidades avanzadas
Manejo de estructuras anidadas y tipos especiales
Symfony Yaml admite anidamiento de cualquier profundidad, así como tipos de datos especiales como fechas, null y valores booleanos:
$complexYaml = "server: host: 192.168.1.1 ports: - 80 - 443 - 8080 settings: timeout: 30 enabled: true description: ~ created_at: 2024-01-15";
$parsed = Yaml::parse($complexYaml);var_dump($parsed['server']['settings']['enabled']); // bool(true)var_dump($parsed['server']['settings']['description']); // NULLvar_dump($parsed['server']['settings']['created_at']); // string(10) "2024-01-15"