New in Symfony 6.1: Service Decoration Attributes

Contributed by Hubert Lenoir and Robin Chalas in #45834,

46112.

The decorator pattern is a design pattern that allows to modify the behavior of an individual object without affecting the behavior of other objects from the same class. In Symfony applications, service decoration allows you to change the behavior of some service without replacing it or modifying it for other parts of the application. You can already configure service decoration using YAML, XML and PHP. In Symfony 6.1 we're adding the option to configure decoration using PHP attributes. Consider the common case where you want to decorate a service (e.g. Mailer) with a new service that adds logging capabilities to it (e.g. LoggingMailer). This is how you can configure decoration with PHP attributes:

    // src/Mailer/LoggingMailer.php

namespace App\Mailer;

// ... use Symfony\Component\DependencyInjection\Attribute\AsDecorator;

[AsDecorator(decorates: Mailer::class)]

class LoggingMailer { // ... }

The #[AsDecorator] attribute support all the extra options that you might need:

    // ...

[AsDecorator(

decorates: Mailer::class,
priority: 10,
onInvalid: ContainerInterface::IGNORE_ON_INVALID_REFERENCE,

)] class LoggingMailer { // ... }

If you need to access the decorated service inside the decorating one, add the

[MapDecorated] attribute to any of the service constructor arguments:

    // ...

use Symfony\Component\DependencyInjection\Attribute\AsDecorator; use Symfony\Component\DependencyInjection\Attribute\MapDecorated;

[AsDecorator(decorates: Mailer::class)]

class LoggingMailer { public function __construct(#[MapDecorated] Mailer $originalMailer) { // ... }

// ...

}

                Sponsor the Symfony project.

https://symfony.com/blog/new-in-symfony-6-1-service-decoration-attributes?utm_source=Symfony%20Blog%20Feed&utm_medium=feed

Creată 3y | 2 mai 2022, 09:20:12


Autentifică-te pentru a adăuga comentarii

Alte posturi din acest grup

Symfony 6.4.24 released

Symfony 6.4.24 has just been released. Read the Symfony upgrade guide to learn more about upgrading Symfony and use the SymfonyInsight upgrade reports to detect the code you will need to change in you

31 iul. 2025, 13:10:32 | Symfony
Symfony 7.2.9 released

Symfony 7.2.9 has just been released. Read the Symfony upgrade guide to learn more about upgrading Symfony and use the SymfonyInsight upgrade reports to detect the code you will need to change in your

31 iul. 2025, 13:10:31 | Symfony
Symfony 7.3.2 released

Symfony 7.3.2 has just been released. Read the Symfony upgrade guide to learn more about upgrading Symfony and use the SymfonyInsight upgrade reports to detect the code you will need to change in your

31 iul. 2025, 13:10:30 | Symfony
A Week of Symfony #969 (July 21–27, 2025)

This week, development focused on the upcoming Symfony 7.4 and 8.0 releases. We added new features such as the ObjectMapperAwareInterface, improved value transformers in JsonStreamer, and enabled load

27 iul. 2025, 09:30:15 | Symfony
SymfonyCon Amsterdam 2025: Community Evening - Let’s Celebrate 20 Years of Symfony Together!

Symfony is turning 20 and we’re throwing a party you won’t want to miss! 🥳

Join us for an unforgettable evening of drinks, music, and great company at the Kanarie Club in Amsterdam!

This year

23 iul. 2025, 15:10:02 | Symfony
A Week of Symfony #968 (July 14–20, 2025)

This week, the upcoming Symfony 7.4 version improved the Serializer component by adding more prefix support to the accessor, added more code to make the JsonPath component RFC compliant, and added sup

20 iul. 2025, 08:20:04 | Symfony
A Week of Symfony #967 (July 7–13, 2025)

This week, Symfony unveiled the Symfony AI initiative, a set of components and bundles designed to bring powerful AI capabilities directly into your PHP applications. In addition, we published travel

13 iul. 2025, 09:20:11 | Symfony