因為工作需要,最近在倒騰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的文法:
在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 }<span style="white-space:pre"> </span>#錯誤寫法1:沒有用單引号包起來
bat:
website:{ baidu: ' http://www.bai'u.com'}<span style="white-space:pre"> </span>#錯誤寫法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=