Yaml组件
编辑该页面Yaml组件
Yaml组件加载和转储Yaml文件。
它是什么?
Symfob娱乐下载ony Yaml组件解析Yaml字符串将它们转换为PHP数组。它也能够将PHP数组转换成YAML字符串。
YAML,YAML不是标记语言,是人类友好的数据序列化所有编程语言标准。YAML是一个伟大的对你的配置文件格式。YAML文件一样表达XML文件和读取INI文件。
提示
了解更多关于YAML的规范。
安装
1
美元作曲家需要symfony / yaob娱乐下载ml
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求ob娱乐下载供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
为什么?
快
Symfony Yaml的目标之一是找到ob娱乐下载正确的速度和功能之间的平衡。它支持所需的特性来处理配置文件。值得注意的特点是:缺乏文档的指令,多行引用消息,紧凑块集合和多文档文件。
真正的解析器
它支持一个真正的解析器和能够解析YAML的大子集规范,为所有您的配置需求。这也意味着解析器很健壮,容易理解,简单扩展。
明确的错误信息
每当你的语法有问题与你的YAML文件、库输出有用的消息文件名和行号出现问题的位置。它简化了调试。
转储文件支持
也能够把PHP数组和对象YAML的支持,和内联水平配置输出。
类型支持
它支持大多数的YAML内置类型如日期、整数,八进制数字、布尔值、和更多…
完整的合并关键支持
完全支持引用别名和完整的合并的关键。不要重复你自己通过引用常见的配置。
使用Symfony ob娱乐下载YAML组件
Symfob娱乐下载ony Yaml组件主要包括两类:一个解析Yaml字符串(解析器),另一个转储YAML的PHP数组字符串(自动倾卸车)。
这两个类,Yaml类作为一个瘦包装器,简化了共同使用。
阅读YAML内容
的parse ()方法解析YAML字符串,并将其转换为一个PHP数组:
1 2 3 4
使用ob娱乐下载\组件\Yaml\Yaml;美元价值= Yaml::解析(“foo:酒吧”);/ / $ value = [“foo”= > '酒吧']
如果一个错误发生在解析,解析器会抛出一个抛出ParseException异常指示错误类型和行原YAML字符串错误发生的位置:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\Yaml\异常\抛出ParseException;试一试{美元价值= Yaml::解析(“……”);}抓(ParseException美元异常{printf ()无法解析字符串:YAML %年代”,美元异常- >getMessage ());}
阅读YAML文件
的parseFile ()方法解析YAML给定文件路径的内容,并将它们转换成一个PHP的值:
1 2 3
使用ob娱乐下载\组件\Yaml\Yaml;美元价值= Yaml::parseFile (“/道路/ / file.yaml”);
如果一个错误发生在解析,解析器会抛出一个抛出ParseException
例外。
写作YAML文件
的dump ()转储任何PHP数组YAML的表示方法:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\Yaml\Yaml;美元数组= (“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::转储(美元数组,2,8);
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解析内容,所有的_
字符从数值文字内容,所以没有限制数量的下划线可以包含或你组的内容。
高级用法:国旗
对象解析和倾销
你可以通过使用转储对象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实现肯定不会——使用自由裁量权!
解析和倾销对象作为地图
你可以把对象作为使用Yaml地图DUMP_OBJECT_AS_MAP
国旗:
1 2 3 4 5
美元对象=新\ stdClass ();美元对象- >foo =“酒吧”;美元倾倒= Yaml::转储([“数据”= >美元对象),2,4,Yaml::DUMP_OBJECT_AS_MAP);/ /抛售美元= "数据:\ n foo:酒吧”
通过使用和解析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::转储(美元数据,2,4,Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);/ /将抛出一个异常
处理日期
默认情况下,YAML解析器将转换非上市弦看起来像一个日期或日期时间到Unix时间戳;例如2016-05-27
或2016 - 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 / const PHP_INT_SIZE}”;美元参数= Yaml::解析(美元yaml,Yaml::PARSE_CONSTANT);/ /参数美元= [“foo”= >“PHP_INT_SIZE”,“酒吧”= > 8];
解析PHP枚举
YAML解析器支持PHP枚举单位和支持枚举。默认情况下,他们作为普通的字符串解析。使用PARSE_CONSTANT
国旗和特殊php /枚举!
语法解析它们作为适当的PHP枚举:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
字符串枚举FooEnum: {情况下Foo =“foo”;情况下酒吧=“酒吧”;}/ /……美元yaml=”{foo: FooEnum:: foo,酒吧:! php / enum FooEnum:: foo}”;美元参数= Yaml::解析(美元yaml,Yaml::PARSE_CONSTANT);/ /“foo”键的值是一个字符串,因为它错过了”!php /枚举的语法/ /参数美元= [“foo”= >“FooEnum: foo”,“酒吧”= > FooEnum:: foo);美元yaml=”{foo: FooEnum:: foo,酒吧:! php / enum FooEnum:: foo - >价值}”;美元参数= Yaml::解析(美元yaml,Yaml::PARSE_CONSTANT);/ /“foo”键的值是一个字符串,因为它错过了”!php /枚举的语法/ /参数美元= [“foo”= >“FooEnum: foo”,“酒吧”= >“foo”);
6.2
支持PHP枚举是在Symfony 6.2中引入的。ob娱乐下载
二进制数据的解析和倾销
非utf - 8编码的字符串是倾倒base64编码的数据:
1 2 3 4
美元imageContents= file_get_contents (__DIR__。“/图片/ logo.png”);美元倾倒= Yaml::转储([“标志”= >美元imageContents]);/ /标识:! !二进制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);/ /解析美元= Symfob娱乐下载ony \组件标签\ Yaml \ \ TaggedValue (“my_tag”, (“foo”= > '酒吧']);美元tagName=美元解析- >getTag ();/ /美元tagName = ' my_tag '美元tagValue=美元解析- >getValue ();/ / $ tagValue = (“foo”= >“酒吧”)
如果转储包含的内容TaggedValue对象,它们被自动转换为YAML标签:
1 2 3 4 5
使用ob娱乐下载\组件\Yaml\标签\TaggedValue;美元数据=新TaggedValue (“my_tag”,(“foo”= >“酒吧”]);美元倾倒= Yaml::转储(美元数据);/ /抛售美元= ' !my_tag {foo: bar}’
倾销Null值
官方的YAML规范使用零
和~
表示空值。该组件使用零
默认情况下,当倾销null值但你可以抛弃他们~
与DUMP_NULL_AS_TILDE
国旗:
1 2 3 4 5
美元倾倒= Yaml::转储([“foo”= >零]);/ / foo:零美元倾倒= Yaml::转储([“foo”= >零),2,4,Yaml::DUMP_NULL_AS_TILDE);/ / foo: ~
倾销作为字符串的数字键
默认情况下,digit-only数组键作为整数倾倒。您可以使用DUMP_NUMERIC_KEY_AS_STRING
国旗如果你想转储string-only密钥:
1 2 3 4 5
美元倾倒= Yaml::转储([200年= >“foo”]);/ / 200:foo美元倾倒= Yaml::转储([200年= >“foo”),2,4,Yaml::DUMP_NUMERIC_KEY_AS_STRING);/ /“200”:foo
6.3
的DUMP_NUMERIC_KEY_AS_STRING
国旗是在Symfony 6.3中引入的。ob娱乐下载
语法验证
YAML的语法内容可以通过CLI使用验证LintCommand命令。
首先,安装控制台组件:
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 ();
然后,执行脚本验证内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#验证单个文件美元php的棉絮。/ / file.yaml php路径#或验证多个文件美元php的棉絮。php路径/ / file1。yamlpath/to/file2.yaml#或一个目录中的所有文件美元php的棉絮。php路径/ /目录中#或在多个目录的所有文件美元php的棉絮。php路径/ / / / directory2 directory1路径#或内容传递给STDIN美元猫路径/ /文件。yaml| php lint.php#你也可以从产品毛羽排除一个或多个文件美元php的棉絮。php路径/ /目录——排除=路径/ /目录/ foo。yaml——排除= / /目录/ bar.yaml路径
结果写入到STDOUT和默认使用纯文本格式。添加- - -格式
选项以JSON格式输出:
1
美元php的棉絮。/ / file.yaml php路径- - -格式json
提示
产品毛羽命令还将检查报告任何不支持在YAML文件。举例来说这可能是有用的识别与自动测试期间YAML文件的内容。