Trabalhando com YAML em PHP: biblioteca Symfony Yaml
YAML (YAML Ain't Markup Language) é um formato de serialização de dados frequentemente usado para arquivos de configuração, descrição de estruturas de dados e troca de informações entre serviços. Em PHP, existem várias soluções para trabalhar com YAML, mas a mais popular e funcional é o componente Symfony Yaml. Ele fornece métodos convenientes para parsing (leitura) e dump (escrita) de dados YAML, suporta todas as especificações YAML 1.2 e está integrado em muitos frameworks, incluindo Laravel e Symfony.
Neste artigo, abordaremos detalhadamente a instalação, operações básicas e recursos avançados da biblioteca Symfony Yaml. Você aprenderá como converter YAML em arrays PHP e vice-versa, além de como lidar com estruturas complexas.
Instalação da biblioteca
O Symfony Yaml é instalado via Composer. Execute o comando na raiz do seu projeto:
composer require symfony/yamlApós a instalação, inclua o autoloader do Composer e importe as classes necessárias:
require 'vendor/autoload.php';
use Symfony\\Component\\Yaml\\Yaml;use Symfony\\Component\\Yaml\\Exception\\ParseException;Operações básicas
Parsing de string YAML
O método Yaml::parse() converte uma string YAML em um array PHP. Veja um exemplo com uma configuração simples:
$yamlString = "database: host: localhost port: 3306 name: mydb user: admin password: secret";
try { $data = Yaml::parse($yamlString); print_r($data);} catch (ParseException $e) { echo 'Erro ao fazer parsing do YAML: ' . $e->getMessage();}Resultado da execução:
Array( [database] => Array ( [host] => localhost [port] => 3306 [name] => mydb [user] => admin [password] => secret ))Parsing de arquivo YAML
Na maioria das vezes, o YAML é armazenado em arquivos. Para lê-los, use file_get_contents() junto com o parser:
$yamlFile = __DIR__ . '/config.yaml';if (!file_exists($yamlFile)) { die('Arquivo de configuração não encontrado');}
try { $config = Yaml::parse(file_get_contents($yamlFile)); echo 'Host do banco de dados: ' . $config['database']['host'];} catch (ParseException $e) { echo 'Erro ao ler o arquivo: ' . $e->getMessage();}Dump (escrita) em YAML
O método Yaml::dump() converte um array PHP de volta para uma string YAML. Isso é útil para gerar configurações ou exportar dados:
$data = [ 'app' => [ 'name' => 'MyApp', 'version' => '1.0.0', 'debug' => true, 'modules' => ['auth', 'api', 'admin'] ]];
$yamlOutput = Yaml::dump($data, 3); // Segundo parâmetro — nível de aninhamentofile_put_contents('app_config.yaml', $yamlOutput);echo $yamlOutput;Resultado no arquivo:
app: name: MyApp version: '1.0.0' debug: true modules: - auth - api - adminRecursos avançados
Tratamento de estruturas aninhadas e tipos especiais
O Symfony Yaml suporta aninhamento de qualquer profundidade, bem como tipos especiais de dados, como datas, null e 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"