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