除了一些大的功能之外,Symfony 3.3也包含了微小调整,以令你工作得更容易。
添加了用于“创建autowired定义”的快捷方式
在PHP中通过ContainerBuilder来创建一个服务定义是下面这样:
1 2 3 4 | $container->register('app.twig_extension', AppExtension::class)
->setAutowired(true)
->addTag('twig.extension')
; |
给出一个自动关联(autowiring)就是为了开发得更快速,在Symfony 3.3中,你可以使用全新的 autowire()
快捷方法来实现同样的结果:
1 2 3 | $container->autowire('app.twig_extension', AppExtension::class)
->addTag('twig.extension')
; |
添加了用于“Config prototypes”的快捷方式
ArrayNodeDefinition
类的 prototype()
方法让你能够为整型、浮点、布尔、数组等创建不同类型的prototypes。问题在于这个方法始终返回一个 NodeDefinition
对象,而不是创建出来的特定对象 (IntegerNodeDefinition
, ArrayNodeDefinition
)。
这会令IDE不能够 理解(understand) 下述代码,其中的 max()
方法对于 NodeDefinition
对象来说是 undefined :
1 2 | $node = new ArrayNodeDefinition('name');
$node->prototype('integer')->max(10); |
在Symfony 3.3中我们为每一种可能的prototype添加了专用的快捷方法。现在你可以按下例重构上例中的代码,同时你的编辑器将会识别 max()
方法:
1 2 | $node = new ArrayNodeDefinition('name');
$node->integerPrototype()->max(10); |
添加了用于“仅包含name属性的标签”的Yaml语法快捷方式
用于服务定义的Tags(标签),可以定义(一些)配置参数(parameters),但通常它们只会有names:
1 2 3 4 5 | services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
tags:
- { name: twig.extension } |
在这种情况下,定义一个Yaml hash(译注:hash即指键值型,- { name: twig.extension }
)是杀鸡牛刀的。在Symfony 3.3中,当仅需tag name时,你可以直接以字符串方式来添加标签:
1 2 3 4 | services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
tags: ['twig.extension'] |