From 730fbfd0248df0e18334410e63ab09f25d0bcd0d Mon Sep 17 00:00:00 2001 From: Nayte Date: Sat, 29 Mar 2025 14:30:56 +0100 Subject: [PATCH] [Messenger] Exclude AsMessenger attribute from services WIP --- .../Component/DependencyInjection/CHANGELOG.md | 1 + .../Tests/Fixtures/Utils/ObjectAsMessage.php | 10 ++++++++++ .../Messenger/DependencyInjection/MessengerPass.php | 10 ++++++++++ .../Tests/DependencyInjection/MessengerPassTest.php | 11 +++++++++++ 4 files changed, 32 insertions(+) create mode 100644 src/Symfony/Component/DependencyInjection/Tests/Fixtures/Utils/ObjectAsMessage.php diff --git a/src/Symfony/Component/DependencyInjection/CHANGELOG.md b/src/Symfony/Component/DependencyInjection/CHANGELOG.md index 07521bc863e42..abd7104c20bac 100644 --- a/src/Symfony/Component/DependencyInjection/CHANGELOG.md +++ b/src/Symfony/Component/DependencyInjection/CHANGELOG.md @@ -11,6 +11,7 @@ CHANGELOG for auto-configuration of classes excluded from the service container * Accept multiple auto-configuration callbacks for the same attribute class * Leverage native lazy objects when possible for lazy services + * Class attributes `#[AsMessage]` and `#[Entity]` are now automatically excluded as services injection, like `#[Exclude]` does 7.2 --- diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/Utils/ObjectAsMessage.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/Utils/ObjectAsMessage.php new file mode 100644 index 0000000000000..eaf0f9f8355e8 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/Utils/ObjectAsMessage.php @@ -0,0 +1,10 @@ +registerReceivers($container, $busIds); } $this->registerHandlers($container, $busIds); + $this->excludeMessagesFromServices($container); } private function registerHandlers(ContainerBuilder $container, array $busIds): void @@ -388,4 +390,12 @@ private function getServiceClass(ContainerBuilder $container, string $serviceId) return $definition->getClass(); } } + + private function excludeMessagesFromServices(ContainerBuilder $container): void + { + $container->registerAttributeForAutoconfiguration( + AsMessage::class, + static fn (ChildDefinition $definition) => $definition->addTag('container.excluded') + ); + } } diff --git a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php index 4de01a129e546..df74dd11f6dd4 100644 --- a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php +++ b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php @@ -23,6 +23,7 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\ServiceLocator; +use Symfony\Component\DependencyInjection\Tests\Fixtures\Utils\ObjectAsMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpReceiver; use Symfony\Component\Messenger\Command\ConsumeMessagesCommand; @@ -385,6 +386,16 @@ public function testRegisterAbstractHandler() ); } + public function testRegisterClassesWithExcludedAttributes() + { + $container = $this->getContainerBuilder(); + $container->register(ObjectAsMessage::class); + + (new MessengerPass())->process($container); + + $this->assertSame(true, $container->getDefinition(ObjectAsMessage::class)->hasTag('container.excluded')); //false I miss something + } + public function testThrowsExceptionIfTheHandlerClassDoesNotExist() { $this->expectException(RuntimeException::class); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy