Symfony 3.2将引入一些微小的YAML“不建议使用”的内容,为的是令YAML组件完全兼容YAML协议。

不建议使用:键映射后不跟空格 

当定义一个映射时,YAML需要在键与值之间的冒号后面至少跟一个空格。在以前版本的Symfony中,我们没有要求必须有此空格。在Symfony 3.2中,我们不建议再有这种行为,到Symfony 4.0时就会抛出一个ParseException异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
# It works in Symfony 3.1, it's deprecated in 3.2, it fails in 4.0
# 3.1中还能这样运行,3.2中被deprecated,4.0中失效
parameters:
    foo:bar
    published:true
    default_page:1
 
# It works in every past, present and future Symfony version
# 这样就可以在过去、现在和将来的Symfony版本中正常运行
parameters:
    foo: bar
    published: true
    default_page: 1

不建议使用:定义重复的键 

之前版本的Symfony中,当一个YAML文件包含重复的键时,第一个键将被使用,剩余的键都被静默地忽略了(silently ignored):

1
2
3
4
5
6
7
# the second key is ignored and this document is parsed
# as: 'parameters' => array('key' => 'aaa')
# 第二个键被忽略,而文档会被解析为:'parameters' => array('key' => 'aaa')
parameters:
    key: 'aaa'
    # ...
    key: 'bbb'

Symfony 3.2中,这种行为不建议出现,Symfony 4.0中将抛出ParseException异常,现在是时候检查你的YAML文件中是否存在重复的键了。

已被转移到YAML组件中的yaml:lint命令 

并非严格意义上的不建议使用,但Symfony 3.2中我们决定把yaml:lint命令从FrameworkBundle中转移到YAML组件。这样一来,你在检查(lint)你的YAML文件时将毋须再加载整个FrameworkBundle。

唯一的不同是,当使用YAML组件中的yaml:lint时,你可以检查文件和目录,而使用完整版框架时,更可以检查bundles:

1
2
3
4
5
6
7
8
9
10
11
# it works in the component and the framework
# 在组件和框架中皆可运行
 
./bin/console yaml:lint parameters.yml
 
./bin/console yaml:lint app/config/
 
# it only works in the framework
# 仅作用于完整版框架
 
./bin/console yaml:lint @AppBundle