Работа с YAML в PHP: библиотеки и инструменты
YAML (YAML Ain't Markup Language) — это формат сериализации данных, удобный для чтения человеком. Он часто используется для файлов конфигурации, определения схем данных и обмена информацией между сервисами. В PHP существует несколько способов работы с YAML: от встроенных расширений (при наличии) до мощных сторонних библиотек. В этой статье мы подробно разберём основные инструменты, их установку и практические примеры.
Зачем нужен YAML в PHP?
PHP-разработчики активно используют YAML для:
- Конфигурационных файлов фреймворков (Symfony, Laravel в некоторых случаях);
- Описания миграций баз данных;
- Хранения переводов и локализации;
- Определения структуры тестовых данных (фикстур);
- Настройки CI/CD (GitLab CI, Ansible).
Понимание того, как парсить и создавать YAML в PHP, — обязательный навык для современного backend-разработчика.
1. Встроенное расширение yaml (PECL)
Самый производительный способ — использовать расширение yaml, устанавливаемое через PECL. Оно предоставляет две ключевые функции:
yaml_parse()— преобразует YAML-строку в массив PHP;yaml_emit()— преобразует массив PHP в YAML-строку.
Установка
pecl install yaml
После установки добавьте в php.ini строку:
extension=yaml.so
Пример использования
<?php
// Парсинг YAML строки
$yamlString = "
database:
host: localhost
port: 3306
name: test_db
";
$config = yaml_parse($yamlString);
echo $config['database']['host']; // localhost
// Создание YAML из массива
$data = [
'app' => [
'name' => 'MyApp',
'version' => '2.0'
]
];
$yamlOutput = yaml_emit($data);
echo $yamlOutput;
?>
2. Библиотека Symfony Yaml (рекомендуемый способ)
Если у вас нет возможности устанавливать PECL-расширения (например, на общем хостинге), лучший выбор — библиотека Symfony Yaml. Это часть экосистемы Symfony, но она отлично работает как самостоятельный компонент. Библиотека полностью написана на PHP, не требует внешних зависимостей и поддерживает все возможности YAML 1.1 и 1.2.
Установка через Composer
composer require symfony/yaml
Основные классы
Symfony\Component\Yaml\Yaml— статический фасад с методамиparse()иdump();Symfony\Component\Yaml\Parser— класс для парсинга с дополнительными опциями;Symfony\Component\Yaml\Dumper— класс для создания YAML с тонкой настройкой форматирования.
Пример парсинга YAML
<?php
require_once 'vendor/autoload.php';
use Symfony\Component\Yaml\Yaml;
$yamlContent = "
server:
host: 0.0.0.0
port: 8080
ssl: true
";
try {
$array = Yaml::parse($yamlContent);
print_r($array);
// Array ( [server] => Array ( [host] => 0.0.0.0 [port] => 8080 [ssl] => 1 ) )
} catch (\Symfony\Component\Yaml\Exception\ParseException $e) {
echo 'Ошибка парсинга YAML: ' . $e->getMessage();
}
?>
Создание YAML (дамп) из массива
<?php
$config = [
'application' => [
'name' => 'PHP App',
'debug' => true,
'database' => [
'driver' => 'mysql',
'host' => 'localhost',
'user' => 'root'
]
]
];
$yaml = Yaml::dump($config, 3, 2);
// Второй аргумент — уровень вложенности (inline), третий — отступы в пробелах
echo $yaml;
?>
Результат выполнения:
application:
name: 'PHP App'
debug: true
database:
driver: mysql
host: localhost
user: root
3. Работа с YAML-файлами
Чаще всего данные хранятся не в строках, а в файлах. Рассмотрим пример чтения и записи конфигурации: