因为工作需要,最近在倒腾symfony,而symfony框架里面配置文件超级多,用的都是yaml文件作为配置文件,由于自己对该文件不是很熟悉,故找了资料了解了下,此为学习笔记。
首先举个例子,
请将如下php数组转换为yaml格式:
$bat = array(
'website' =>array(
'baidu' => 'http://www.baidu.com',
'qq' => 'http://www.qq.com',
'ali' => array('http://www.taobao.com','http://www.tmall.com')
),
'ceo' => array(
'yanhongli' => '李彦宏',
'huatengma' => '麻花疼',
'yunma' => '马云'
)
);
用yaml来表达可以表现为:
bat:
website:
baidu: http://www.baidu.com
qq: http://www.qq.com
ali:
- http://www.taobao.com
- http://www.tmall.com
ceo:
yanhongli: 李彦宏
huatengma: 麻花疼
yunma: 马云
或者这样:
bat:
website:{ baidu: http://www.baidu.com, qq: http://www.qq.com, ali: [http://www.taobao.com, http://www.tmall.com] }
ceo:{ yanhongli: 李彦宏, huatengma: 麻花疼, yunma: 马云 }
在yaml里面,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的键值(key/value)对用冒号“:”来分割。yaml也有用来描述好几行相同结构数据的缩写语法,数组用“[]”包括起来,hash用“{}”来包括。
这几乎就是yaml的全部语法了。
使用yaml的注意事项
1.在yaml里面,结构通过缩进来表示,yaml不支持制表符tab缩进,请使用空格缩进
2、如果参数是以空格开始或结束的字符串,应使用单引号把他包进来。如果一个字符串参数包含特殊字符,也要用单引号包起来。下面是示例:
如果要保存类似 http://www.bai'u.com这样的数据时,下面这种写法是错误的:
bat:
website:{ baidu: http://www.bai'u.com } #错误写法1:没有用单引号包起来
bat:
website:{ baidu: ' http://www.bai'u.com'} #错误写法2:字符串中包含了单引号而且字符串开头有空格时需要用两个单引号来表示字符串中的单引号
正确写法如下:
bat:
website:{ baidu: ' http://www.bai''u.com'}
3、当字符串较长时,可以使用特殊字符头外加一个缩进表示长字符串,可以换行。下面是示例:
website:
caoliu: >
你懂的你懂的你懂的你懂的你懂的你懂的
你懂的你懂的你懂的你懂的你懂的你懂的
你懂的你懂的你懂的你懂的你懂的你懂的
dongjinre: |
你懂的你懂的你懂的你懂的你懂的你懂的
你懂的你懂的你懂的你懂的你懂的你懂的
你懂的你懂的你懂的你懂的你懂的你懂的
4、在yaml里,用on、1、true来表示true,off、0、false来表示false
5、在yaml里,用#做注释
6、如果你在yaml文件中看到了.开头的字符串,这个字符串代表的是分类头,如下所示:
all:
.general:
tax: 19.6
mail:
webmaster: [email protected]
分类头的主要作用在于使yaml文件更易读。
推荐两个php解析yaml的类库:
1、symfony框架自带的yaml模块:https://packagist.org/packages/symfony/yaml
2、spyc解析类:http://sourceforge.net/projects/spyc/files/OldFiles/spyc-0.3.beta.tar.gz/download?use_mirror=iweb&download=