From acae5cada21b4c0505a9d49d7ed4d99804831a2f Mon Sep 17 00:00:00 2001 From: Wouter de Jong Date: Sat, 5 Nov 2022 18:20:29 +0100 Subject: [PATCH] [Messenger] Do not return fallback senders when other senders were already found --- .../Transport/Sender/SendersLocatorTest.php | 17 +++++++++++++++++ .../Transport/Sender/SendersLocator.php | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Sender/SendersLocatorTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Sender/SendersLocatorTest.php index d58a4d63d50aa..3faab44d0696a 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/Sender/SendersLocatorTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/Sender/SendersLocatorTest.php @@ -52,6 +52,23 @@ public function testItReturnsTheSenderBasedOnTransportNamesStamp() $this->assertSame([], iterator_to_array($locator->getSenders(new Envelope(new SecondMessage())))); } + public function testSendersMapWithFallback() + { + $firstSender = $this->createMock(SenderInterface::class); + $secondSender = $this->createMock(SenderInterface::class); + $sendersLocator = $this->createContainer([ + 'first' => $firstSender, + 'second' => $secondSender, + ]); + $locator = new SendersLocator([ + DummyMessage::class => ['first'], + '*' => ['second'], + ], $sendersLocator); + + $this->assertSame(['first' => $firstSender], iterator_to_array($locator->getSenders(new Envelope(new DummyMessage('a')))), 'Unexpected senders for configured message'); + $this->assertSame(['second' => $secondSender], iterator_to_array($locator->getSenders(new Envelope(new SecondMessage()))), 'Unexpected senders for unconfigured message'); + } + private function createContainer(array $senders): ContainerInterface { $container = $this->createMock(ContainerInterface::class); diff --git a/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php b/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php index 5de6936d591f7..3420a6cc6043a 100644 --- a/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php +++ b/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php @@ -51,6 +51,12 @@ public function getSenders(Envelope $envelope): iterable foreach (HandlersLocator::listTypes($envelope) as $type) { foreach ($this->sendersMap[$type] ?? [] as $senderAlias) { + if (str_ends_with($type, '*') && $seen) { + // the '*' acts as a fallback, if other senders already matched + // with previous types, skip the senders bound to the fallback + continue; + } + if (!\in_array($senderAlias, $seen, true)) { $seen[] = $senderAlias; 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