New in Symfony 5.3: Service Autoconfiguration and Attributes

Service Autoconfiguration Using Attributes¶

        Contributed by 
        Nicolas Grekas 
        in #39804.

Service autoconfiguration allows to automatically apply certain configuration to your services, based on your service’s class. This is useful for example to apply certain service tag to classes that implement some interface (e.g. when you create a class implementing Twig\Extension\AbstractExtension, Symfony applies the twig.extension tag to it so you can use it without configuring it). PHP attributes are one of the best new features introduced in PHP 8. They allow to add machine-readable metadata to your code. That’s why in Symfony 5.3 we’ve combined both to allow autoconfigure services using PHP attributes. In previous Symfony versions, you could add the following to your kernel or dependency injection extension: 1 2$container->registerForAutoconfiguration(SomeInterface::class) ->addTag('app.some_tag'); In Symfony 5.3 you can remove this configuration if you like and use instead the

[Autoconfigure] attribute on the PHP interface:

1 2 3 4 5 6 7 8 9 10# src/SomeNamespace/SomeInterface.php namespace App\SomeNamespace; use Symfony\Component\DependencyInjection\Attribute\Autoconfigure;

[Autoconfigure(tags: ['app.some_tag'])]

interface SomeInterface { // ... } In addition to tags, you can autoconfigure other service properties, such as method calls, service configurators, whether the service is public/shared/lazy, etc. Autoconfigurable Attributes¶

        Contributed by 
        Alexander M. Turek
        and Nicolas Grekas
        in #39897,
        #40234
        and #40556.

A different but related feature introduced in Symfony 5.3 allows you to use PHP attributes to autoconfigure instances of classes instead of interfaces. For example, in previous Symfony applications your configuration had to include the following about controllers: 1 2 3 4 5# config/services.yaml App\Controller\: resource: '../src/Controller/' tags: ['controller.service_arguments']

...

This was necessary to apply the controller.service_arguments tag to all the services whose classes where stored in the src/Controller/ directory of your application (this tag allows autowiring the arguments of all controller methods, not only its constructor). In Symfony 5.3 you can remove that configuration if you like and apply instead the following attribute to all your controllers that need that feature: 1 2 3 4 5 6 7 8// src/Controller/MyController.php use Symfony\Component\HttpKernel\Attribute\AsController;

[AsController]

class MyController { // ... } These attribute names follow the pattern #[As...]. Symfony 5.3 provides

[AsCommand] to define a PHP class as a Symfony console command,

[AsEventListener] to define a PHP class as a Symfony event listener, etc.

Note that you don’t need to add these attributes when upgrading to Symfony 5.3. They are an optional way of achieving the same that you get when using autoconfigure: true in config/services.yaml in your current applications.

                Sponsor the Symfony project.

http://feedproxy.google.com/~r/symfony/blog/~3/dRcIWlBijYk/new-in-symfony-5-3-service-autoconfiguration-and-attributes

Creado 4y | 12 may 2021, 7:20:05


Inicia sesión para agregar comentarios

Otros mensajes en este grupo.

New in Symfony 7.3: Yaml Improvements

Symfony has been reducing the need for configuration in applications for several years now. Thanks to PHP attributes, you can now configure most things alongside the relevant code, removing the need f

19 may 2025, 8:10:09 | Symfony
A Week of Symfony #959 (May 12–18, 2025)

This week, development activity focused on polishing Symfony 7.3 ahead of its final release in two weeks. We also continued publishing articles highlighting the new features of Symfony 7.3 and shared

18 may 2025, 8:50:08 | Symfony
SymfonyOnline June 2025:  Keynote “Symfony in 2025, Scaling to Zero.”

SymfonyOnline June 2025 is almost here, starting in a few weeks on:

June 10-11: Workshop days. June 12-13: Online conference days in English. All talks will be available for replay as soon as

16 may 2025, 15:10:26 | Symfony
New in Symfony 7.3: Dependency Injection Improvements

Symfony 7.3 introduces several enhancements to the DependencyInjection component that simplify service configuration, make autoconfiguration more flexible, and enable environment-specific aliasing.

S

16 may 2025, 8:10:11 | Symfony
New in Symfony 7.3: Namespaced Caches

Contributed by Nicolas Grekas in

15 may 2025, 8:50:14 | Symfony
SymfonyOnline June 2025: Building an Automated Trading System with Symfony

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:

June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe

14 may 2025, 14:30:11 | Symfony
New in Symfony 7.3: Security Improvements

Symfony security includes several significant improvements and new features in Symfony 7.3.

Deprecate eraseCredentials() Method… https://symfony.com/blog/new-in-symfony-7-3-security-improvements?utm_

14 may 2025, 9:50:05 | Symfony