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.
Autentifică-te pentru a adăuga comentarii
Alte posturi din acest grup

This week, development activity focused on the upcoming Symfony 7.4 and 8.0 versions, which will deprecate and remove many features. In addition, we published a case study about Yousign. Finally, we'r

As digital signatures become the norm in modern business, Yousign has established itself as a trusted leader across Europe. Behind its simple, intuitive interface is a powerful technical engine, handl

Get ready for the exciting SymfonyOnline June 2025, kicking off in a few days only! There’s still time to register and join the international online Symfony conference—along with pre-conferenc

This week, Symfony released the stable version of Symfony 7.3, which includes lots of amazing new features. We also published the maintenance versions 6.4.22 and 7.2.7.
Symfony development highlights

This is the second part of the blog post showcasing the main DX (developer experience) features introduced in Symfony 7.3. Read the first part of this blog post.
Verify URI Signatures… https://symfon

Symfony 6.4.22 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

Symfony 7.2.7 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