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

Creado 3y | 2 may 2022, 9:20:12


Inicia sesión para agregar comentarios

Otros mensajes en este grupo.

Symfony 7.3.0-RC1 released

Symfony 7.3.0-RC1 has just been released. This is a pre-release version of Symfony 7.3. If you want to test it in your own applications before its final release, run the following commands:

26 may 2025, 0:10:10 | Symfony
A Week of Symfony #960 (May 19–25, 2025)

This week, development activity focused on putting the final touches on Symfony 7.3 in preparation for its stable release next week. In addition, we published a security fix for a potential vulnerabil

25 may 2025, 10:10:12 | Symfony
New in Symfony 7.3: New Bridges and Improved Integrations

Symfony's bridge packages integrate third-party services, such as mailers, notifiers, and translation providers, into Symfony applications. With more than 120 bridges available today, Symfony supports

23 may 2025, 9:30:04 | Symfony
New in Symfony 7.3: Messenger Improvements

Symfony Messenger component keeps evolving to meet the needs of complex, modern applications. In Symfony 7.3, we're introducing several powerful features to it.

Run Process Using the Shell… https://s

22 may 2025, 7:50:11 | Symfony
New in Symfony 7.3: Routing Improvements

The Routing component provides an impressive list of features to map incoming URLs to your application code. Symfony 7.3 pushes it even further with a set of new features that improve developer experi

21 may 2025, 11:10:07 | Symfony
New in Symfony 7.3: JsonStreamer Component

Contributed by Mathias Arlaud in

20 may 2025, 9:30:13 | Symfony
Symfony UX CVE-2025-47946: Unsanitized HTML attribute injection via ComponentAttributes

Affected versions

Symfony UX symfony/ux-live-component and symfony/ux-twig-component versions <2.25.1 are affected by this security issue.

The issue has been fixed in the 2.25.1 version of these

19 may 2025, 12:40:14 | Symfony