Формат YAML

Компонент Symfony Yaml реализует выбранное подмножество функций, определенных в спецификацию версии YAML 1.2.

Скаляры

Синтаксис скаляров аналогичен синтаксису PHP.

Строки

Строки в YAML могут быть заключены как в одинарные, так и в двойные кавычки. В некоторых случаях Они также могут быть без кавычек:

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

При использовании строк, заключенных в одинарные кавычки, любые одинарные кавычки в их содержимом Чтобы избежать этого, необходимо удвоить:'

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

  • :, , , , , , , , , , , , , , , , , , {}[],&*#?|-<>=!%@`

Стиль в двойных кавычках позволяет выражать произвольные строки с помощью Использование для экранирования символов и последовательностей. Например, это очень полезно когда необходимо внедрить символ или символ Юникода в строку.\\n Copy

Если строка содержит любой из следующих управляющих символов, она должна быть Экранируется с двойными кавычками:

  • \0, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , \x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\e\x1c\x1d\x1e\x1f\N\_\L\P

Наконец, есть и другие случаи, когда строки должны быть заключены в кавычки, независимо от того, Вы используете одинарные или двойные кавычки:

  • Если строка имеет значение or (в противном случае, она будет рассматриваться как логическое значение);truefalse
  • Когда строка имеет значение или (в противном случае она будет считаться значением);null~null
  • Если строка выглядит как число, например целые числа (например, и т. д.), числа с плавающей запятой (например, , ) и экспоненциальные числа (например, , и т.д.) (в противном случае оно будет рассматриваться как числовое значение);2142.614.912e7
  • Когда строка выглядит как дата (например, ) (в противном случае это было бы автоматически преобразуется в временную метку Unix).2014-12-31

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

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

Обратите внимание на два пробела перед каждой строкой в предыдущих примерах. Они не будет отображаться в результирующих строках PHP.

Числа

Значения null

Значения NULL в YAML могут быть выражены с помощью null или ~

Логические значения

Логические значения в YAML выражаются с помощью true и false

Даты

YAML использует стандарт ISO-8601 для выражения дат: Copy

Коллекции

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

В последовательностях используется тире, за которым следует пробел:

Предыдущий файл YAML эквивалентен следующему PHP-коду: Copy

В сопоставлениях используется двоеточие, за которым следует пробел ( ) для обозначения каждой пары ключ/значение:

который эквивалентен этому PHP-коду:

В сопоставлении ключ может быть любым допустимым скаляром.

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

YAML использует отступы с одним или несколькими пробелами для описания вложенных коллекций:

Приведенный выше YAML эквивалентен следующему PHP-коду: Copy1 2 3 4 5 6 7 8 9 10

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

Вы можете вкладывать последовательности и сопоставления по своему усмотрению:

YAML также может использовать стили потока для коллекций, используя явные индикаторы а не отступ для обозначения области действия.

Последовательность может быть записана в виде списка, разделенного запятыми, в квадратных скобках ():[] Copy

Сопоставление может быть записано в виде разделенного запятыми списка ключей/значений в curly Фигурные скобки ():{} Copy

Вы можете смешивать и сочетать стили, чтобы добиться лучшей читаемости: Copy

 Copy

Комментарии

Комментарии можно добавлять в YAML, добавляя к ним префикс ():#

Комментарии игнорируются средством синтаксического анализа YAML и не нуждаются в отступах в соответствии с текущим уровнем вложенности в коллекции.

Явная типизация

Спецификация YAML определяет некоторые теги для явного задания типа любых данных:

Особенности Symfony

Компонент Yaml предоставляет некоторые дополнительные функции, которые не являются частью компонента официальная спецификация YAML, но полезны в приложениях Symfony:

  • !php/const позволяет получить значение константы PHP. Этот тег принимает Полное имя класса константы в качестве аргумента: Copydata: page_limit: !php/const App\Pagination\Paginator::PAGE_LIMIT
  • !php/object позволяет передавать сериализованное представление PHP объект (созданный с помощью функции serialize()), который будет десериализован при разборе YAML-файла: Copydata: my_object: !php/object 'O:8:"stdClass":1:{s:3:"bar";i:2;}'
  • !php/enum позволяет использовать регистр перечисления PHP. Этот тег принимает полный Имя класса перечисления case в качестве аргумента: Copy1 2 3 4 5data: # You can use the typed enum case... operator_type: !php/enum App\Operator\Enum\Type::Or # ... or you can also use "->value" to directly use the value of a BackedEnum case operator_type: !php/enum App\Operator\Enum\Type::Or->value

Неподдерживаемые функции YAML

Следующие возможности YAML не поддерживаются компонентом Symfony Yaml:

  • Мультидокументы (и маркеры);---...
  • Ключи сложного сопоставления и комплексные значения, начинающиеся с ?;
  • Помеченные значения в виде ключей;
  • Следующие теги и типы: , , , , !!set!!omap!!pairs!!seq!!bool!!int!!merge!!null!!timestamp!!value!!yaml;
  • Теги ( директива; пример: ) и ссылки на теги (пример: TAG%TAG ! tag:example.com,2000:app/!<tag:example.com,2000:app/foo>);
  • Использование синтаксиса, подобного последовательности, для сопоставления элементов (пример: ; используйте вместо этого).{foo, bar}{foo: ~, bar: ~}

Эта работа, включая примеры кода, доступна по лицензии Creative Commons BY-SA 3.0.

Вам может также понравиться...