Contributed by
Guilhem Niot
in #21194.
YAML格式 因为简单、可读性强而被接受,但在底层,它也为复杂需求定义了许多高级功能。其中之一是 YAML tags,主要用于定义显式的数据类型。
Symfony Yaml组件 已经支持了若干种标签,像是存储二进制数据的 !!binary
以及引用PHP常量的 !php/const:
。在Symfony 3.3中你可以 定义你自己的YAML标签,这得益于被称之为 Yaml::PARSE_CUSTOM_TAGS
的全新旗标(flag)。
自定义标签可以是以 !
字符开始的任意字符串,比如下例中的 !my_tag
值:
1 | !my_tag { foo: bar } |
使用下面的PHP代码来解析之:
1 2 3 4 5 6 7 8 | use Symfony\Component\Yaml\Yaml;
$yaml = "!my_tag { foo: bar }";
$config = Yaml::parse($yaml, Yaml::PARSE_CUSTOM_TAGS);
$tag = $config->getTag(); // $tag = 'my_tag'
$value = $config->getValue(); // $value = array('foo' => 'bar') |
YAML tags的语义取决于每一个程序,因此解析器把那些值打包成一个通用的 Symfony\Component\Yaml\Tag\TaggedValue
类。上例中, $config
变量现在包含:
1 | TaggedValue('my_tag', array('foo' => 'bar')); |
对YAML标签的支持,可以是以上两种方式。因此如果你的PHP代码中包含了 TaggedValue
对象,它们将被转换成YAML标签: