Компонент Yaml в Symfony

Компонент Symfony Yaml загружает и выгружает файлы в формате YAML. Он преобразует строки YAML в массивы PHP, а также может преобразовывать массивы PHP обратно в строки YAML

    Компонент Yaml

    Одна из целей Symfony Yaml — найти правильный баланс между скоростью работы и функционалом. Он поддерживает только те функции, которые необходимы для работы с файлами конфигурации, способен обрабатывать большую часть спецификации YAML для любых нужд, связанных с настройкой.


    Symfony Yaml-компонент реализует часть функций, определенных в спецификации версии YAML 1.2

    Компонент YAML использует метод serialize() в PHP для создания строкового представления объекта.

    Компонент Symfony Yaml состоит из двух основных классов: один анализирует строки YAML (Parser), а другой преобразует массив PHP в строку YAML (Dumper).

    Если при разборе кода yaml возникает ошибка, парсер выдает исключение ParseException с указанием типа ошибки и строки в исходной строке YAML, в которой произошла ошибка

    #Преобразование строки в массив php $value = Yaml::parse("foo: bar");

    Метод parseFile() анализирует содержимое YAML в указанном файле и преобразует его в значение PHP

    $value = Yaml::parseFile('/path/to/file.yaml');

    Метод dump() преобразует любой массив PHP в его представление в формате YAML
    Если во время дампа возникает ошибка, парсер выдает исключение DumpException

    use Symfony\Component\Yaml\Yaml; $array = [ 'foo' => 'bar', 'bar' => ['foo' => 'bar', 'bar' => 'baz'], ]; $yaml = Yaml::dump($array); file_put_contents('/path/to/file.yaml', $yaml);

    Формат YAML поддерживает два вида представления массивов: развернутое и встроенное. По умолчанию дампер использует развернутое представление.

    #Развернутое представление foo: bar bar: foo: bar bar: baz #Встроенное представление foo: bar bar: { foo: bar, bar: baz }
    Отступ

    По умолчанию компонент YAML использует 4 пробела для отступа.

    foo: bar bar: foo: bar bar: baz
    Числовые Литералы

    В YAML-файлах можно добавлять символы подчеркивания для улучшения читаемости:
    При разборе содержимого YAML все символы _ удаляются из числовых литералов

    parameters: credit_card_number: 1234_5678_9012_3456 long_number: 10_000_000_000
    Обработка даты

    По умолчанию парсер YAML преобразует строки без кавычек, которые выглядят как дата или дата и время, в метку времени Unix

    Yaml::parse('2016-05-27'); // 1464307200 #Or $date = Yaml::parse('2016-05-27', Yaml::PARSE_DATETIME);
    Выгрузка многострочных литеральных блоков

    В YAML несколько строк могут быть представлены в виде литеральных блоков. По умолчанию дампер кодирует несколько строк как встроенную строку

    Синтаксический анализ перечислений PHP

    Парсер YAML поддерживает перечисления PHP
    По умолчанию они анализируются как обычные строки

    $yaml = '{ foo: FooEnum::Foo, bar: !php/enum FooEnum::Foo->value }'; $parameters = Yaml::parse($yaml, Yaml::PARSE_CONSTANT); // $parameters = ['foo' => 'FooEnum::Foo', 'bar' => 'foo'];
    Разбор и сохранение пользовательских тегов

    Помимо встроенной поддержки таких тегов, как !php/const и !!binary, вы можете создавать собственные теги YAML и анализировать их с помощью флага PARSE_CUSTOM_TAGS

    Выдача числовых ключей в виде строк

    По умолчанию ключи массива, состоящие только из цифр, выводятся как целые числа. Если вы хотите вывести ключи только в виде строк, используйте флаг DUMP_NUMERIC_KEY_AS_STRING:

    $dumped = Yaml::dump([200 => 'foo'], 2, 4, Yaml::DUMP_NUMERIC_KEY_AS_STRING); // '200': foo
    Выгрузка коллекции карт

    При выгрузке коллекций карт в формате YAML компонент использует дефис в отдельной строке в качестве разделителя:

    planets: - name: Mercury distance: 57910000 - name: Jupiter distance: 778500000

    Строки в YAML могут быть заключены как в одинарные, так и в двойные кавычки
    Кавычки необходимы, если строка содержит специальные или зарезервированные символы.
    Стиль с двойными кавычками позволяет использовать \ для экранирования символов и последовательностей


    Если строка содержит разрывы строк, можно использовать литеральный стиль, обозначаемый вертикальной чертой (|), чтобы указать, что строка будет занимать несколько строк.

    Кроме того, строки можно записывать в свернутом виде, обозначая их символом >, где каждый разрыв строки заменяется пробелом

    Пустые значения

    Пустые значения в YAML можно обозначить с помощью null или ~.

    Булевы значения

    Булевы значения в YAML обозначаются символами true и false.

    Даты

    В YAML для обозначения дат используется стандарт ISO-8601

    2001-12-14T21:59:43.10-05:00 # simple date 2002-12-14
    Коллекции

    Коллекции в YAML могут представлять собой последовательность (индексированные массивы в PHP) или набор элементов (ассоциативные массивы в PHP).

    #В последовательностях используется дефис, за которым следует пробел: - PHP - Perl - Python #Предыдущий файл YAML эквивалентен следующему коду на PHP: ['PHP', 'Perl', 'Python']; #В сопоставлениях для обозначения каждой пары «ключ-значение» используется двоеточие и пробел PHP: 5.2 MySQL: 5.1 Apache: 2.2.20 #Это эквивалентно следующему коду на PHP: ['PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20'];

    Количество пробелов между двоеточием и значением не имеет значения

    #В YAML для описания вложенных коллекций используются отступы в один или несколько пробелов: 'symfony 1.0': PHP: 5.0 Propel: 1.2 'symfony 1.2': PHP: 5.2 Propel: 1.3 #Приведенный выше YAML-код эквивалентен следующему коду на PHP: [ 'symfony 1.0' => [ 'PHP' => 5.0, 'Propel' => 1.2, ], 'symfony 1.2' => [ 'PHP' => 5.2, 'Propel' => 1.3, ], ];

    При использовании отступов в файле YAML нужно помнить одну важную вещь: отступы должны быть сделаны с помощью одного или нескольких пробелов, но ни в коем случае не с помощью табуляции.

    #Последовательность можно записать в виде списка, разделенного запятыми, в квадратных скобках [PHP, Perl, Python] #Сопоставление можно записать в виде списка ключей и значений, разделенных запятыми и заключенных в фигурные скобки ({}): { PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }
    Явное указание типа

    #Это значение обрабатывается как строка (а не преобразуется в DateTime) start_date: !!str 2002-12-14 #Это значение обрабатывается как число с плавающей запятой (вместо 3 будет 3,0) price: !!float 3
    Дополнительные возможности

    !php/const позволяет получить значение константы PHP. В качестве аргумента этот тег принимает полное имя класса константы:

    data: page_limit: !php/const App\Pagination\Paginator::PAGE_LIMIT

    !php/object позволяет передать сериализованное представление объекта PHP (созданного с помощью функции serialize()), которое будет десериализовано при разборе файла YAML:

    my_object: !php/object 'O:8:"stdClass":1:{s:3:"bar";i:2;}'

    !php/enum позволяет использовать перечисление PHP enum case. Этот тег принимает в качестве аргумента полное имя класса перечисления case:

    operator_type: !php/enum App\Operator\Enum\Type::Or

    Префикс @= используется компонентом внедрения зависимостей для внедрения значений, вычисляемых с помощью выражений. В файлах конфигурации YAML любая строка, начинающаяся с @=, рассматривается как выражение:

    arguments: - '@=service("App\\Mail\\MailerConfiguration").getMailerMethod()'

    Как внедрить значения на основе сложных выражений.
    https://symfony.com/doc/current/service_container/expression_language.html


    Дополнительный источник

    https://yaml.org/spec/1.2.2/


    Источники
    Последнее изменение: 13.05.2026 08:15


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ