Формат YAML
Компонент Symfony Yaml реализует выбранное подмножество функций, определенных в спецификацию версии YAML 1.2.
Скаляры
Синтаксис скаляров аналогичен синтаксису PHP.
Строки
Строки в YAML могут быть заключены как в одинарные, так и в двойные кавычки. В некоторых случаях Они также могут быть без кавычек:
1 2 3 4 5 |
A string in YAML 'A single-quoted string in YAML' "A double-quoted string in YAML" |
Стили в кавычках полезны, когда строка начинается или заканчивается одним или несколькими соответствующими пробелы, потому что строки без кавычек обрезаются с обоих концов при синтаксическом анализе содержание. Кавычки обязательны, если строка содержит специальные или зарезервированные символы.
При использовании строк, заключенных в одинарные кавычки, любые одинарные кавычки в их содержимом Чтобы избежать этого, необходимо удвоить:'
1 |
'A single quote '' inside a single-quoted string' |
Строки, содержащие любой из следующих символов, должны быть заключены в кавычки. Несмотря на то, что вы можно использовать двойные кавычки, для этих символов удобнее использовать одинарные кавычки, что позволяет избежать обратной косой черты:\
:
, , , , , , , , , , , , , , , , , ,{
}
[
]
,
&
*
#
?
|
-
<
>
=
!
%
@
`
Стиль в двойных кавычках позволяет выражать произвольные строки с помощью Использование для экранирования символов и последовательностей. Например, это очень полезно когда необходимо внедрить символ или символ Юникода в строку.\
\n
Copy
1 |
"A double-quoted string in YAML\n" |
Если строка содержит любой из следующих управляющих символов, она должна быть Экранируется с двойными кавычками:
\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 (в противном случае, она будет рассматриваться как логическое значение);
true
false
- Когда строка имеет значение или (в противном случае она будет считаться значением);
null
~
null
- Если строка выглядит как число, например целые числа (например, и т. д.), числа с плавающей запятой (например, , ) и экспоненциальные числа (например, , и т.д.) (в противном случае оно будет рассматриваться как числовое значение);
2
14
2.6
14.9
12e7
- Когда строка выглядит как дата (например, ) (в противном случае это было бы автоматически преобразуется в временную метку Unix).
2014-12-31
Если строка содержит переносы строк, можно использовать литеральный стиль, указанный вертикальной чертой (), чтобы указать, что строка будет занимать несколько строк. В Литералы, переводы строк сохраняются:|
1 2 3 |
| \/ /| |\/| | / / | | | |__ |
Кроме того, строки могут быть записаны в свернутом стиле, обозначаемом , где каждый перенос строки заменяется пробелом:>
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> This is a very long sentence that spans several lines in the YAML. # This will be parsed as follows: (notice the trailing \n) # "This is a very long sentence that spans several lines in the YAML.\n" >- This is a very long sentence that spans several lines in the YAML. # This will be parsed as follows: (without a trailing \n) # "This is a very long sentence that spans several lines in the YAML." |
Обратите внимание на два пробела перед каждой строкой в предыдущих примерах. Они не будет отображаться в результирующих строках PHP.
Числа
1 2 |
# целое число 12 |
1 2 |
# восьмеричное число 0o14 |
1 2 |
# 16-ричное число 0xC |
1 2 |
# число с плавающей точкой 13.4 |
1 2 |
# переменное число в экспонентной форме 1.2e+34 |
1 2 |
# infinity .inf |
Значения null
Значения NULL в YAML могут быть выражены с помощью null или ~
Логические значения
Логические значения в YAML выражаются с помощью true и false
Даты
YAML использует стандарт ISO-8601 для выражения дат: Copy
1 2 3 4 |
2001-12-14T21:59:43.10-05:00 # simple date 2002-12-14 |
Коллекции
Файл YAML редко используется для описания простого скаляра. В большинстве случаев это описывает коллекцию. Коллекции YAML могут быть последовательностью (индексированные массивы в PHP) или отображение элементов (ассоциативные массивы в PHP).
В последовательностях используется тире, за которым следует пробел:
1 2 3 |
- PHP - Perl - Python |
Предыдущий файл YAML эквивалентен следующему PHP-коду: Copy
1 |
['PHP', 'Perl', 'Python']; |
В сопоставлениях используется двоеточие, за которым следует пробел ( ) для обозначения каждой пары ключ/значение:
1 2 3 |
PHP: 5.2 MySQL: 5.1 Apache: 2.2.20 |
который эквивалентен этому PHP-коду:
1 |
['PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20']; |
В сопоставлении ключ может быть любым допустимым скаляром.
Количество пробелов между двоеточием и значением значения не имеет значения:
1 2 3 |
PHP: 5.2 MySQL: 5.1 Apache: 2.2.20 |
YAML использует отступы с одним или несколькими пробелами для описания вложенных коллекций:
1 2 3 4 5 6 |
'symfony 1.0': PHP: 5.0 Propel: 1.2 'symfony 1.2': PHP: 5.2 Propel: 1.3 |
Приведенный выше YAML эквивалентен следующему PHP-коду: Copy1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 |
[ 'symfony 1.0' => [ 'PHP' => 5.0, 'Propel' => 1.2, ], 'symfony 1.2' => [ 'PHP' => 5.2, 'Propel' => 1.3, ], ]; |
Есть одна важная вещь, которую вы должны помнить при использовании отступов в Файл YAML: отступы должны быть сделаны с одним или несколькими пробелами, но никогда с пробелами. табуляторы.
Вы можете вкладывать последовательности и сопоставления по своему усмотрению:
1 2 3 4 5 6 |
'Chapter 1': - Introduction - Event Types 'Chapter 2': - Introduction - Helpers |
YAML также может использовать стили потока для коллекций, используя явные индикаторы а не отступ для обозначения области действия.
Последовательность может быть записана в виде списка, разделенного запятыми, в квадратных скобках ():[]
Copy
1 |
[PHP, Perl, Python] |
Сопоставление может быть записано в виде разделенного запятыми списка ключей/значений в curly Фигурные скобки ():{}
Copy
1 |
{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 } |
Вы можете смешивать и сочетать стили, чтобы добиться лучшей читаемости: Copy
1 2 |
'Chapter 1': [Introduction, Event Types] 'Chapter 2': [Introduction, Helpers] |
Copy
1 2 |
'symfony 1.0': { PHP: 5.0, Propel: 1.2 } 'symfony 1.2': { PHP: 5.2, Propel: 1.3 } |
Комментарии
Комментарии можно добавлять в YAML, добавляя к ним префикс ():#
1 2 3 |
# Comment on a line "symfony 1.0": { PHP: 5.0, Propel: 1.2 } # Comment at the end of a line "symfony 1.2": { PHP: 5.2, Propel: 1.3 } |
Комментарии игнорируются средством синтаксического анализа YAML и не нуждаются в отступах в соответствии с текущим уровнем вложенности в коллекции.
Явная типизация
Спецификация YAML определяет некоторые теги для явного задания типа любых данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
data: # this value is parsed as a string (it's not transformed into a DateTime) start_date: !!str 2002-12-14 # this value is parsed as a float number (it will be 3.0 instead of 3) price: !!float 3 # this value is parsed as binary data encoded in base64 picture: !!binary | R0lGODlhDAAMAIQAAP//9/X 17unp5WZmZgAAAOfn515eXv Pz7Y6OjuDg4J+fn5OTk6enp 56enmleECcgggoBADs= |
Особенности 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.