In addition to some large new features, Symfony 3.3 will also contain minor tweaks to make your work a bit easier.

Added a shortcut to create autowired definitions

Contributed by
Wouter De Jong
in #20648.

Creating service definitions in PHP via the ContainerBuilder work as follows:

1
2
3
4
$container->register('app.twig_extension', AppExtension::class)
    ->setAutowired(true)
    ->addTag('twig.extension')
;

Given that autowiring is all about working more quickly, in Symfony 3.3 you can use the new autowire() shortcut method to achieve the same result:

1
2
3
$container->autowire('app.twig_extension', AppExtension::class)
    ->addTag('twig.extension')
;

Added shorthand methods for Config prototypes

Contributed by
Ilyes kooli
in #20921.

The prototype() method of the ArrayNodeDefinition class allows you to create different types of prototypes for integers, floats, booleans, arrays, etc. The problem is that this method always returns a NodeDefinition object instead of the specific object created (IntegerNodeDefinition, ArrayNodeDefinition).

This makes IDEs unable to understand code like the following, where the max() method is undefined for the NodeDefinition object:

1
2
$node = new ArrayNodeDefinition('name');
$node->prototype('integer')->max(10);

In Symfony 3.3 we added a dedicated shortcut method for each of the possible prototypes. Now you can refactor the previous example as follows and your IDE will recognize the max() method:

1
2
$node = new ArrayNodeDefinition('name');
$node->integerPrototype()->max(10);

Added a Yaml syntax shortcut for name-only tags

Contributed by
Wouter De Jong
in #20651.

Tags used in service definitions can define configuration parameters, but they usually define just their names:

1
2
3
4
5
services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        tags:
            - { name: twig.extension }

In these cases, defining a Yaml hash (- { name: twig.extension }) is overkill. In Symfony 3.3, when only the tag name is needed, you can just add the tag as a string:

1
2
3
4
services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        tags: ['twig.extension']