除了一些大的功能之外,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']