diff --git a/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php b/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php index 9aabe794a11ab..38acbdee86081 100644 --- a/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php +++ b/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php @@ -15,7 +15,9 @@ use Symfony\Component\Messenger\Asynchronous\Transport\ReceivedMessage; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\EnvelopeAwareInterface; +use Symfony\Component\Messenger\EnvelopeItemInterface; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; +use Symfony\Component\Messenger\TransportableEnvelopeItemInterface; /** * @author Samuel Roze @@ -40,6 +42,11 @@ public function handle($message, callable $next) return $next($message); } + $transportableItems = array_filter($envelope->all(), function (EnvelopeItemInterface $item): bool { + return $item instanceof TransportableEnvelopeItemInterface; + }); + $envelope = new Envelope($envelope->getMessage(), $transportableItems); + if (!empty($senders = $this->senderLocator->getSendersForMessage($envelope->getMessage()))) { foreach ($senders as $sender) { if (null === $sender) { diff --git a/src/Symfony/Component/Messenger/Asynchronous/Transport/ReceivedMessage.php b/src/Symfony/Component/Messenger/Asynchronous/Transport/ReceivedMessage.php index c713a589ad53c..74dfda0fe6ee6 100644 --- a/src/Symfony/Component/Messenger/Asynchronous/Transport/ReceivedMessage.php +++ b/src/Symfony/Component/Messenger/Asynchronous/Transport/ReceivedMessage.php @@ -25,13 +25,4 @@ */ final class ReceivedMessage implements EnvelopeItemInterface { - public function serialize() - { - return ''; - } - - public function unserialize($serialized) - { - // noop - } } diff --git a/src/Symfony/Component/Messenger/EnvelopeItemInterface.php b/src/Symfony/Component/Messenger/EnvelopeItemInterface.php index 2561a127546c0..332d2e6164062 100644 --- a/src/Symfony/Component/Messenger/EnvelopeItemInterface.php +++ b/src/Symfony/Component/Messenger/EnvelopeItemInterface.php @@ -13,12 +13,13 @@ /** * An envelope item related to a message. - * This item must be serializable for transport. + * + * @see TransportableEnvelopeItemInterface for an envelope item that could be transported. * * @author Maxime Steinhausser * * @experimental in 4.1 */ -interface EnvelopeItemInterface extends \Serializable +interface EnvelopeItemInterface { } diff --git a/src/Symfony/Component/Messenger/Middleware/Configuration/ValidationConfiguration.php b/src/Symfony/Component/Messenger/Middleware/Configuration/ValidationConfiguration.php index 1b6180857b31d..2353d4f17b3ac 100644 --- a/src/Symfony/Component/Messenger/Middleware/Configuration/ValidationConfiguration.php +++ b/src/Symfony/Component/Messenger/Middleware/Configuration/ValidationConfiguration.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Messenger\Middleware\Configuration; -use Symfony\Component\Messenger\EnvelopeItemInterface; +use Symfony\Component\Messenger\TransportableEnvelopeItemInterface; use Symfony\Component\Validator\Constraints\GroupSequence; /** @@ -19,7 +19,7 @@ * * @experimental in 4.1 */ -final class ValidationConfiguration implements EnvelopeItemInterface +final class ValidationConfiguration implements TransportableEnvelopeItemInterface { private $groups; diff --git a/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php index aa22741c397b6..ad7cf3580e6f7 100644 --- a/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php @@ -16,8 +16,10 @@ use Symfony\Component\Messenger\Asynchronous\Routing\SenderLocatorInterface; use Symfony\Component\Messenger\Asynchronous\Transport\ReceivedMessage; use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\EnvelopeItemInterface; use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage; use Symfony\Component\Messenger\Transport\SenderInterface; +use Symfony\Component\Messenger\TransportableEnvelopeItemInterface; class SendMessageMiddlewareTest extends TestCase { @@ -37,6 +39,27 @@ public function testItSendsTheMessageToAssignedSender() $middleware->handle($message, $next); } + public function testItSendsEnvelopeWithTransportableItemsOnly() + { + $envelope = Envelope::wrap(new DummyMessage('Hey')) + ->with(new TransportableItem()) + ->with(new NonTransportableItem()) + ; + $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); + $next = $this->createPartialMock(\stdClass::class, array('__invoke')); + + $middleware = new SendMessageMiddleware(new InMemorySenderLocator(array( + $sender, + ))); + + $sender->expects($this->once())->method('send')->with(Envelope::wrap(new DummyMessage('Hey')) + ->with(new TransportableItem()) + ); + $next->expects($this->never())->method($this->anything()); + + $middleware->handle($envelope, $next); + } + public function testItSendsTheMessageToAssignedSenderWithPreWrappedMessage() { $envelope = Envelope::wrap(new DummyMessage('Hey')); @@ -114,3 +137,20 @@ public function getSendersForMessage($message): array return $this->senders; } } + +class TransportableItem implements TransportableEnvelopeItemInterface +{ + public function serialize() + { + // no op + } + + public function unserialize($serialized) + { + // no op + } +} + +class NonTransportableItem implements EnvelopeItemInterface +{ +} diff --git a/src/Symfony/Component/Messenger/Tests/Fixtures/AnEnvelopeItem.php b/src/Symfony/Component/Messenger/Tests/Fixtures/AnEnvelopeItem.php index 9e5bb0c92b63d..e2cf685dccefd 100644 --- a/src/Symfony/Component/Messenger/Tests/Fixtures/AnEnvelopeItem.php +++ b/src/Symfony/Component/Messenger/Tests/Fixtures/AnEnvelopeItem.php @@ -15,19 +15,4 @@ class AnEnvelopeItem implements EnvelopeItemInterface { - /** - * {@inheritdoc} - */ - public function serialize() - { - return ''; - } - - /** - * {@inheritdoc} - */ - public function unserialize($serialized) - { - // noop - } } diff --git a/src/Symfony/Component/Messenger/Transport/Serialization/Serializer.php b/src/Symfony/Component/Messenger/Transport/Serialization/Serializer.php index cfb30090e5dfa..a8e11817a3b17 100644 --- a/src/Symfony/Component/Messenger/Transport/Serialization/Serializer.php +++ b/src/Symfony/Component/Messenger/Transport/Serialization/Serializer.php @@ -68,8 +68,8 @@ public function encode(Envelope $envelope): array } $headers = array('type' => \get_class($envelope->getMessage())); - if ($configurations = $envelope->all()) { - $headers['X-Message-Envelope-Items'] = serialize($configurations); + if ($items = $envelope->all()) { + $headers['X-Message-Envelope-Items'] = serialize($items); } return array( diff --git a/src/Symfony/Component/Messenger/Transport/Serialization/SerializerConfiguration.php b/src/Symfony/Component/Messenger/Transport/Serialization/SerializerConfiguration.php index 478e197080adf..0ee266d2fedb8 100644 --- a/src/Symfony/Component/Messenger/Transport/Serialization/SerializerConfiguration.php +++ b/src/Symfony/Component/Messenger/Transport/Serialization/SerializerConfiguration.php @@ -11,14 +11,14 @@ namespace Symfony\Component\Messenger\Transport\Serialization; -use Symfony\Component\Messenger\EnvelopeItemInterface; +use Symfony\Component\Messenger\TransportableEnvelopeItemInterface; /** * @author Maxime Steinhausser * * @experimental in 4.1 */ -final class SerializerConfiguration implements EnvelopeItemInterface +final class SerializerConfiguration implements TransportableEnvelopeItemInterface { private $context; diff --git a/src/Symfony/Component/Messenger/TransportableEnvelopeItemInterface.php b/src/Symfony/Component/Messenger/TransportableEnvelopeItemInterface.php new file mode 100644 index 0000000000000..05828e9a61ce6 --- /dev/null +++ b/src/Symfony/Component/Messenger/TransportableEnvelopeItemInterface.php @@ -0,0 +1,14 @@ + + * + * @experimental in 4.1 + */ +interface TransportableEnvelopeItemInterface extends EnvelopeItemInterface, \Serializable +{ +} 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