Yaml组件

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.2,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

Yaml组件

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

它是什么?

Symf欧宝娱乐app下载地址ony Yaml组件解析Yaml字符串将它们转换为PHP数组。它也能够将PHP数组转换成YAML字符串。

YAML,YAML不是标记语言,是人类友好的数据序列化所有编程语言标准。YAML是一个伟大的对你的配置文件格式。YAML文件一样表达XML文件和读取INI文件。

Symf欧宝娱乐app下载地址ony Yaml组件实现一个选择中定义的特征子集YAML 1.2版规范

提示

了解更多关于Yaml组件YAML格式篇文章。

安装

您可以安装组件在两个不同的方面:

然后,需要供应商/ autoload.php文件,使作曲家提供的半自动的机制。否则,您的应用程序无法找到这个Symfony组件的类。欧宝娱乐app下载地址

为什么?

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

真正的解析器

它体育真正的解析器和能够解析YAML的大子集规范,为所有您的配置需求。这也意味着解析器很健壮,容易理解,简单扩展。

明确的错误信息

每当你的语法有问题与你的YAML文件、库输出有用的消息文件名和行号出现问题的位置。它简化了调试。

转储文件支持

也能够把PHP数组和对象YAML的支持,和内联水平配置输出。

类型支持

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

完整的合并关键支持

完全支持引用别名和完整的合并的关键。不要重复你自己通过引用常见的配置。

使用Symfony 欧宝娱乐app下载地址YAML组件

Symf欧宝娱乐app下载地址ony Yaml组件非常简单,主要由两个类:一个解析Yaml字符串(解析器),另一个转储YAML的PHP数组字符串(自动倾卸车)。

这两个类,Yaml类作为一个瘦包装器,简化了共同使用。

阅读YAML文件

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

1 2 3
使用欧宝娱乐app下载地址\组件\Yaml\Yaml;美元价值= Yaml::解析函数(“/道路/ / file.yml”));

谨慎

因为它是目前可能将文件名传递给这个方法,你必须先验证输入。2.2通过文件名在Symfony中已被弃用,是在Symfony 3.0删欧宝娱乐app下载地址除。

如果一个错误发生在解析,解析器会抛出一个抛出ParseException异常指示错误类型和行原YAML字符串错误发生的位置:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址\组件\Yaml\异常\抛出ParseException;试一试{美元价值= Yaml::解析函数(“/道路/ / file.yml”));}(ParseException美元e{printf ()“无法YAML解析:% s”,美元e- >getMessage ());}

写作YAML文件

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

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\Yaml\Yaml;美元数组=数组(“foo”= >“酒吧”,“酒吧”= >数组(“foo”= >“酒吧”,“酒吧”= >“记者”),);美元yaml= Yaml::转储(美元数组);写入“/道路/ / file.yml”,美元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::转储(美元数组,2,8);
1 2 3 4
foo:酒吧栏:foo:酒吧栏:巴兹

数字字面值

3.2

支持解析整数按强调是在Symfony 3.2中引入的分组。欧宝娱乐app下载地址

长数字字面值、整数、浮点数和十六进制数,谁都知道他们可怜的可读性的代码和配置文件。这就是为什么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解析内容,所有的_字符从数值文字内容,所以没有限制数量的下划线可以包含或你组的内容。

高级用法:国旗

3.1

国旗在Symfony 3.1中引入的,取代了早期的欧宝娱乐app下载地址布尔参数。

对象解析和倾销

你可以通过使用转储对象DUMP_OBJECT国旗:

1 2 3 4 5
美元对象=\ stdClass ();美元对象- >foo =“酒吧”;美元倾倒= Yaml::转储(美元对象,2,4,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 /对象标签和non-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 3 4
美元数据=\ stdClass ();/ /默认对象是无效的。Yaml::转储(美元数据,2,4,Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);/ /将抛出一个异常回声美元yaml;/ / {foo: bar}

处理日期

默认情况下YAML解析器将转换非上市弦看起来像一个日期或日期时间到Unix时间戳;例如2016-05-272016 - 05 - 27 - t02:59:43.1z(iso - 8601):

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

你可以把它转换为一个DateTime实例通过使用PARSE_DATETIME国旗:

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

将多行文字块

在YAML多行可以表示成文字块,默认情况下,自动倾卸车将作为内联编码多行字符串:

1 2 3
美元字符串=数组(“字符串”= >“多个\在线\ nString”);美元yaml= Yaml::转储(美元字符串);回声美元yaml;/ /字符串:“多个\在线\ nString”

你可以使用一个文本块DUMP_MULTI_LINE_LITERAL_BLOCK国旗:

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

解析PHP常量

默认情况下,YAML解析器将PHP作为普通字符串常数中内容。使用PARSE_CONSTANT国旗和特殊! php /常量:语法解析它们作为适当的PHP常量:

1 2 3
美元yaml=”{foo: PHP_INT_SIZE酒吧:! php /常量:PHP_INT_SIZE}”;美元参数= Yaml::解析(美元yaml,Yaml::PARSE_CONSTANT);/ / $ =参数数组(“foo”= >“PHP_INT_SIZE”,“酒吧”= > 8);

语法验证

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

首先,安装控制台组件:

1
美元作曲家需要symfony /控制台欧宝娱乐app下载地址

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

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

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

1 2 3 4 5 6 7 8
#验证单个文件美元php的棉絮。/ / file.yml php路径#或一个目录中的所有文件美元php的棉絮。php路径/ /目录中#或内容传递给STDIN美元猫路径/ /文件。yml | php lint.php

结果写入到STDOUT和默认使用纯文本格式。添加- - -格式选项以JSON格式输出:

1
美元php的棉絮。/ / file.yml php路径- - -格式json
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。