Yaml组件

编辑本页

Yaml组件

Yaml组件加载和转储Yaml文件。

这是什么?

Symfob娱乐下载ony Yaml组件解析Yaml字符串,将其转换为PHP数组。它还能够将PHP数组转换为YAML字符串。

YAMLYAML不是标记语言,是适用于所有编程语言的人类友好的数据序列化标准。YAML是配置文件的一种很好的格式。YAML文件和XML文件一样具有表现力,和INI文件一样具有可读性。

Symfob娱乐下载ony Yaml组件实现了定义在YAML 1.2版本规范

提示

中了解有关Yaml组件的更多信息YAML格式篇文章。

安装

1
作曲家需要symfony/yamlob娱乐下载

请注意

如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

为什么?

Symfony Yaml的目标之一是在速ob娱乐下载度和功能之间找到正确的平衡。它只支持处理配置文件所需的特性。值得注意的是:文档指令、多行引用消息、紧凑块集合和多文档文件。

真正的解析器

它展示了一个真正的解析器,能够解析YAML规范的一个大子集,以满足您的所有配置需求。这还意味着该解析器非常健壮,易于理解,并且易于扩展。

清除错误消息

每当您的YAML文件出现语法问题时,库都会输出一条有用的消息,其中包含发生问题的文件名和行号。它大大简化了调试。

转储文件支持

它还能够在对象支持下将PHP数组转储到YAML,并提供内联级配置以获得漂亮的输出。

类型支持

它支持大多数YAML内置类型,如日期、整数、八进制数、布尔值等等……

完全合并键支持

完全支持引用、别名和完整的合并键。不要重复引用常用配置位。

使用Symfony ob娱乐下载YAML组件

Symfob娱乐下载ony Yaml组件由两个主要类组成:一个解析Yaml字符串(解析器),另一个将PHP数组转储到YAML字符串(自动倾卸车).

在这两个类之上,是Yaml类充当简化常用用途的薄包装器。

阅读YAML内容

parse ()方法解析YAML字符串并将其转换为PHP数组:

1 2 3 4
使用ob娱乐下载组件YamlYaml价值= Yaml::解析(“foo:酒吧”);// $value = ['foo' => 'bar']

如果在解析期间发生错误,解析器将抛出抛出ParseExceptionexception指示错误类型和原始YAML字符串中错误发生的行:

1 2 3 4 5 6 7
使用ob娱乐下载组件Yaml异常抛出ParseException试一试价值= Yaml::解析('...');}(ParseException异常) {printf('无法解析YAML字符串:%s'异常->getMessage ());}

读取YAML文件

parseFile ()方法解析给定文件路径的YAML内容,并将它们转换为PHP值:

1 2 3
使用ob娱乐下载组件YamlYaml价值= Yaml::parseFile (“/道路/ / file.yaml”);

如果在解析期间发生错误,解析器将抛出抛出ParseException例外。

编写YAML文件

dump ()方法将任何PHP数组转储到它的YAML表示:

1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载组件YamlYaml数组= (“foo”= >“酒吧”“酒吧”= > [“foo”= >“酒吧”“酒吧”= >“记者”]];yaml= Yaml::转储(数组);写入“/道路/ / file.yaml”yaml);

如果在转储期间发生错误,解析器将抛出DumpException例外。

扩展和内联数组

YAML格式支持两种数组表示形式:扩展数组和内联数组。默认情况下,转储器使用扩展表示:

1 2 3 4
foo:酒吧栏:foo:酒吧栏:巴兹

的第二个参数dump ()方法自定义输出从展开表示切换到内联表示的级别:

1
回声Yaml::转储(数组1);
1 2
foo:酒吧栏:foo:酒吧,栏:巴兹
1
回声Yaml::转储(数组2);
1 2 3 4
foo:酒吧栏:foo:酒吧栏:巴兹

缩进

默认情况下,YAML组件将使用4个空格作为缩进。这可以使用第三个参数进行更改,如下所示:

1 2
//使用8个空格缩进回声Yaml::转储(数组28);
1 2 3 4
foo:酒吧栏:foo:酒吧栏:巴兹

数字字面值

长数字文字,如整数、浮点数或十六进制,在代码和配置文件中可读性较差。这就是为什么YAML文件允许添加下划线来提高它们的可读性:

1 2 3 4 5
参数:credit_card_number:1234年_5678_9012_3456long_number:10 _000_000_000pi:3.14159 _26535_89793hex_words:0 x_cafe_f00d

在解析YAML内容期间,所有的_字符从数字文字内容中删除,因此可以包含的下划线数量或对内容进行分组的方式没有限制。

高级用法:Flags

对象解析和转储

方法可以转储对象DUMP_OBJECT国旗:

1 2 3 4 5
对象\ stdClass ();对象->foo =“酒吧”倾倒= Yaml::转储(对象24, Yaml::DUMP_OBJECT);/ / ! php /对象O: 8:“stdClass”:1:{:5:“foo”;销售:7:“酒吧”;}”

并使用PARSE_OBJECT国旗:

1 2 3
解析= Yaml::解析(倾倒, Yaml::PARSE_OBJECT);var_dump (is_object (解析));/ /正确的回声解析->foo;/ /酒吧

YAML组件使用PHP的serialize ()方法生成对象的字符串表示形式。

谨慎

对象序列化是特定于此实现的,其他PHP YAML解析器可能无法识别php /对象标签和非php实现当然不会——谨慎使用!

解析和转储对象为映射

方法可以将对象转储为Yaml映射DUMP_OBJECT_AS_MAP国旗:

1 2 3 4 5
对象\ stdClass ();对象->foo =“酒吧”倾倒= Yaml::转储([“数据”= >对象],24, Yaml::DUMP_OBJECT_AS_MAP);// $dump = "data:\n foo: bar"

并使用PARSE_OBJECT_FOR_MAP国旗:

1 2 3 4
解析= Yaml::解析(倾倒, Yaml::PARSE_OBJECT_FOR_MAP);var_dump (is_object (解析));/ /正确的var_dump (is_object (解析->数据);/ /正确的回声解析->数据->foo;/ /酒吧

YAML组件使用PHP的(数组)强制转换以生成对象的字符串表示形式作为映射。

处理无效类型

默认情况下,解析器将无效类型编码为.方法可以使解析器抛出异常PARSE_EXCEPTION_ON_INVALID_TYPE国旗:

1 2
yaml”!php /对象\ ' O: 8:“stdClass”:1:{:5:“foo”;销售:7:“酒吧”;}\”;Yaml::解析(yaml, Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);//抛出异常

类似地,你可以使用DUMP_EXCEPTION_ON_INVALID_TYPE当倾销:

1 2
数据\ stdClass ();//默认对象无效。Yaml::转储(数据24, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);//抛出异常

处理日期

默认情况下,YAML解析器会将看起来像日期或日期-时间的无引号字符串转换为Unix时间戳;例如2016-05-272016 - 05 - 27 - t02:59:43.1ziso - 8601):

1
Yaml::解析(“2016-05-27”);/ / 1464307200

你可以把它转换成aDateTime实例,使用PARSE_DATETIME国旗:

1 2
日期= Yaml::解析(“2016-05-27”, Yaml::PARSE_DATETIME);var_dump (get_class (日期));/ /日期时间

转储多行文字块

在YAML中,多行可以表示为文字块。默认情况下,转储器将多行编码为内联字符串:

1 2 3
字符串= (“字符串”= >“多个\在线\ nString”];yaml= Yaml::转储(字符串);回声yaml// string: "Multiple\nLine\nString"

的文本块DUMP_MULTI_LINE_LITERAL_BLOCK国旗:

1 2 3 4 5 6 7
字符串= (“字符串”= >“多个\在线\ nString”];yaml= Yaml::转储(字符串24, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK);回声yaml// string: |/ /多个/ /行/ /字符串

解析PHP常量

默认情况下,YAML解析器将内容中包含的PHP常量视为常规字符串。使用PARSE_CONSTANT旗帜和特殊php /常量!语法来解析它们为正确的PHP常量:

1 2 3
yaml'{foo: PHP_INT_SIZE, bar: !php/const PHP_INT_SIZE}'参数= Yaml::解析(yaml, Yaml::PARSE_CONSTANT);/ /参数美元=[“foo”= >“PHP_INT_SIZE”,“酒吧”= > 8];

二进制数据的解析和转储

非UTF-8编码的字符串被转储为base64编码的数据:

1 2 3 4
imageContents= file_get_contents (__DIR__“/图片/ logo.png”);倾倒= Yaml::转储([“标志”= >imageContents]);// logo: !!二进制iVBORw0KGgoAAAANSUhEUgAAA6oAAADqCAY...

类型的二进制数据将自动解析!!二进制YAML标签:

1 2 3
倾倒的标志:! !二进制iVBORw0KGgoAAAANSUhEUgAAA6oAAADqCAY...'解析= Yaml::解析(倾倒);imageContents解析“标志”];

解析和转储自定义标记

除了内置支持的标签php /常量!而且!!二进制,您可以定义自己的自定义YAML标记并使用PARSE_CUSTOM_TAGS国旗:

1 2 3 4 5
数据"!My_tag {foo: bar}"解析= Yaml::解析(数据, Yaml::PARSE_CUSTOM_TAGS);// $parsed = ob娱乐下载Symfony\Component\Yaml\Tag\TaggedValue('my_tag', ['foo' => 'bar']);tagName解析->getTag ();// $tagName = 'my_tag'tagValue解析->getValue ();// $tagValue = ['foo' => 'bar']

如果要转储的内容包含TaggedValue对象,它们会自动转换为YAML标签:

1 2 3 4 5
使用ob娱乐下载组件Yaml标签TaggedValue数据TaggedValue (“my_tag”, (“foo”= >“酒吧”]);倾倒= Yaml::转储(数据);// $dump = '!My_tag {foo: bar}'

转储空值

官方YAML规范使用这两种方法而且表示空值。该组件使用默认情况下,当转储空值时,但您可以将它们转储为DUMP_NULL_AS_TILDE国旗:

1 2 3 4 5
倾倒= Yaml::转储([“foo”= >]);// foo: null倾倒= Yaml::转储([“foo”= >],24, Yaml::DUMP_NULL_AS_TILDE);// foo: ~

语法验证

命令可以通过CLI验证YAML内容的语法LintCommand命令。

首先,安装Console组件:

1
作曲家需要symfony/控制台ob娱乐下载

创建控制台应用程序线头:yaml作为它唯一的命令:

1 2 3 4 5 6 7 8 9
/ / lint.php使用ob娱乐下载组件控制台应用程序使用ob娱乐下载组件Yaml命令LintCommand;(应用程序(yaml /线头的))->add (LintCommand ())->getApplication ()->setDefaultCommand (“线头:yaml”真正的->run ();

然后,执行验证内容的脚本:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#验证单个文件PHP lint.php路径/到/file.yaml#或验证多个文件PHP lint.php路径/to/file1。/ / file2.yaml yaml路径#或目录下的所有文件PHP lint.php的路径/到/目录#或多个目录下的所有文件PHP lint.php路径/to/directory1路径/to/directory2#或传递给STDIN的内容猫路径/ /文件。yaml| php lint.php#你也可以排除一个或多个文件的检测PHP lint.php path/to/directory——exclude=path/to/directory/foo。yaml——排除= / /目录/ bar.yaml路径

结果被写入STDOUT,默认情况下使用纯文本格式。添加- - -格式选项获取JSON格式的输出:

1
PHP lint.php路径/到/file.yaml- - -格式json

提示

检测命令还将报告检查的YAML文件中的任何弃用。例如,这可能有助于在自动化测试期间识别YAML文件内容的弃用。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs