Travailler avec YAML en PHP : la bibliothèque Symfony Yaml
\n\nYAML (YAML Ain't Markup Language) est un format de sérialisation de données souvent utilisé pour les fichiers de configuration, la description de structures de données et l'échange d'informations entre services. En PHP, il existe plusieurs solutions pour travailler avec YAML, mais le composant le plus populaire et le plus fonctionnel est Symfony Yaml. Il fournit des méthodes pratiques pour l'analyse (lecture) et le dump (écriture) de données YAML, prend en charge toutes les spécifications YAML 1.2 et est intégré dans de nombreux frameworks, notamment Laravel et Symfony.
\n\nDans cet article, nous allons détailler l'installation, les opérations de base et les fonctionnalités avancées de la bibliothèque Symfony Yaml. Vous apprendrez à convertir du YAML en tableaux PHP et vice versa, ainsi qu'à traiter des structures complexes.
\n\nInstallation de la bibliothèque
\n\nSymfony Yaml s'installe via Composer. Exécutez la commande à la racine de votre projet :
\n\ncomposer require symfony/yaml\n\nAprès l'installation, incluez l'autoloader de Composer et importez les classes nécessaires :
\n\nrequire 'vendor/autoload.php';\n\nuse Symfony\\Component\\Yaml\\Yaml;\nuse Symfony\\Component\\Yaml\\Exception\\ParseException;\n\nOpérations de base
\n\nAnalyse d'une chaîne YAML
\n\nLa méthode Yaml::parse() convertit une chaîne YAML en tableau PHP. Prenons un exemple avec une configuration simple :
$yamlString = "\ndatabase:\n host: localhost\n port: 3306\n name: mydb\n user: admin\n password: secret\n";\n\ntry {\n $data = Yaml::parse($yamlString);\n print_r($data);\n} catch (ParseException $e) {\n echo 'Erreur d'analyse YAML : ' . $e->getMessage();\n}\n\nRésultat de l'exécution :
\n\nArray\n(\n [database] => Array\n (\n [host] => localhost\n [port] => 3306\n [name] => mydb\n [user] => admin\n [password] => secret\n )\n)\n\nAnalyse d'un fichier YAML
\n\nLe plus souvent, le YAML est stocké dans des fichiers. Pour les lire, utilisez file_get_contents() avec l'analyseur :
$yamlFile = __DIR__ . '/config.yaml';\nif (!file_exists($yamlFile)) {\n die('Fichier de configuration introuvable');\n}\n\ntry {\n $config = Yaml::parse(file_get_contents($yamlFile));\n echo 'Hôte de la base de données : ' . $config['database']['host'];\n} catch (ParseException $e) {\n echo 'Erreur de lecture du fichier : ' . $e->getMessage();\n}\n\nDump (écriture) en YAML
\n\nLa méthode Yaml::dump() convertit un tableau PHP en chaîne YAML. C'est utile pour générer des configurations ou exporter des données :
$data = [\n 'app' => [\n 'name' => 'MyApp',\n 'version' => '1.0.0',\n 'debug' => true,\n 'modules' => ['auth', 'api', 'admin']\n ]\n];\n\n$yamlOutput = Yaml::dump($data, 3); // Deuxième paramètre — niveau d'imbrication\nfile_put_contents('app_config.yaml', $yamlOutput);\necho $yamlOutput;\n\nRésultat dans le fichier :
\n\napp:\n name: MyApp\n version: '1.0.0'\n debug: true\n modules:\n - auth\n - api\n - admin\n\nFonctionnalités avancées
\n\nTraitement des structures imbriquées et des types spéciaux
\n\nSymfony Yaml prend en charge l'imbrication à n'importe quelle profondeur, ainsi que des types de données spéciaux tels que les dates, null et les valeurs booléennes :
\n\n$complexYaml = "\nserver:\n host: 192.168.1.1\n ports:\n - 80\n - 443\n - 8080\n settings:\n timeout: 30\n enabled: true\n description: ~\n created_at: 2024-01-15\n";\n\n$parsed = Yaml::parse($complexYaml);\nvar_dump($parsed['server']['settings']['enabled']); // bool(true)\nvar_dump($parsed['server']['settings']['description']); // NULL\nvar_dump($parsed['server']['settings']['created_at']); // string(10) "2024-01-15"\n\n