diff --git a/UPGRADE-4.2.md b/UPGRADE-4.2.md index 0319f7ca924f..e49c442e05cb 100644 --- a/UPGRADE-4.2.md +++ b/UPGRADE-4.2.md @@ -83,6 +83,11 @@ FrameworkBundle this will generate 404s for non-UTF-8 URLs, which are incompatible with you app anyway, and will allow dumping optimized routers and using Unicode classes in requirements. +Messenger +--------- + + * The `handle` method of the `Symfony\Component\Messenger\Middleware\ValidationMiddleware` and `Symfony\Component\Messenger\Asynchronous\Middleware\SendMessageMiddleware` middlewares now requires an `Envelope` object to be given (because they implement the `EnvelopeAwareInterface`). When using these middleware with the provided `MessageBus`, you will not have to do anything. If you use the middlewares any other way, you can use `Envelope::wrap($message)` to create an envelope for your message. + Security -------- diff --git a/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php b/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php index 16fdfd81f108..5fc0ec87cfb5 100644 --- a/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php +++ b/src/Symfony/Component/Messenger/Asynchronous/Middleware/SendMessageMiddleware.php @@ -34,14 +34,15 @@ public function __construct(SenderLocatorInterface $senderLocator, array $messag } /** + * @param Envelope $envelope + * * {@inheritdoc} */ - public function handle($message, callable $next) + public function handle($envelope, callable $next) { - $envelope = Envelope::wrap($message); if ($envelope->get(ReceivedMessage::class)) { // It's a received message. Do not send it back: - return $next($message); + return $next($envelope); } $sender = $this->senderLocator->getSenderForMessage($envelope->getMessage()); @@ -54,7 +55,7 @@ public function handle($message, callable $next) } } - return $next($message); + return $next($envelope); } private function mustSendAndHandle($message): bool diff --git a/src/Symfony/Component/Messenger/Middleware/Enhancers/ActivationMiddlewareDecorator.php b/src/Symfony/Component/Messenger/Middleware/Enhancers/ActivationMiddlewareDecorator.php index 1c812ccc1215..0c4d103d8c56 100644 --- a/src/Symfony/Component/Messenger/Middleware/Enhancers/ActivationMiddlewareDecorator.php +++ b/src/Symfony/Component/Messenger/Middleware/Enhancers/ActivationMiddlewareDecorator.php @@ -37,12 +37,12 @@ public function __construct(MiddlewareInterface $inner, $activated) /** * @param Envelope $message */ - public function handle($message, callable $next) + public function handle($envelope, callable $next) { - if (\is_callable($this->activated) ? ($this->activated)($message) : $this->activated) { - return $this->inner->handle($message->getMessageFor($this->inner), $next); + if (\is_callable($this->activated) ? ($this->activated)($envelope) : $this->activated) { + return $this->inner->handle($envelope->getMessageFor($this->inner), $next); } - return $next($message); + return $next($envelope); } } diff --git a/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php b/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php index e588d9256bd3..ef3268e8deb5 100644 --- a/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Messenger\Middleware; -use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\EnvelopeAwareInterface; use Symfony\Component\Messenger\Exception\ValidationFailedException; use Symfony\Component\Messenger\Middleware\Configuration\ValidationConfiguration; @@ -29,21 +28,20 @@ public function __construct(ValidatorInterface $validator) $this->validator = $validator; } - public function handle($message, callable $next) + public function handle($envelope, callable $next) { - $envelope = Envelope::wrap($message); - $subject = $envelope->getMessage(); + $message = $envelope->getMessage(); $groups = null; /** @var ValidationConfiguration|null $validationConfig */ if ($validationConfig = $envelope->get(ValidationConfiguration::class)) { $groups = $validationConfig->getGroups(); } - $violations = $this->validator->validate($subject, null, $groups); + $violations = $this->validator->validate($message, null, $groups); if (\count($violations)) { - throw new ValidationFailedException($subject, $violations); + throw new ValidationFailedException($message, $violations); } - return $next($message); + return $next($envelope); } } diff --git a/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php index c9d548360c7b..5a4dc5f204b9 100644 --- a/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Asynchronous/Middleware/SendMessageMiddlewareTest.php @@ -26,15 +26,16 @@ class SendMessageMiddlewareTest extends TestCase public function testItSendsTheMessageToAssignedSender() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); $next = $this->createPartialMock(\stdClass::class, array('__invoke')); $middleware = new SendMessageMiddleware(new InMemorySenderLocator($sender)); - $sender->expects($this->once())->method('send')->with(Envelope::wrap($message)); + $sender->expects($this->once())->method('send')->with($envelope); $next->expects($this->never())->method($this->anything()); - $middleware->handle($message, $next); + $middleware->handle($envelope, $next); } public function testItSendsTheMessageToAssignedSenderWithPreWrappedMessage() @@ -54,6 +55,7 @@ public function testItSendsTheMessageToAssignedSenderWithPreWrappedMessage() public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageClass() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); $next = $this->createPartialMock(\stdClass::class, array('__invoke')); @@ -61,15 +63,16 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageClass() DummyMessage::class => true, )); - $sender->expects($this->once())->method('send')->with(Envelope::wrap($message)); + $sender->expects($this->once())->method('send')->with($envelope); $next->expects($this->once())->method($this->anything()); - $middleware->handle($message, $next); + $middleware->handle($envelope, $next); } public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageParentClass() { $message = new ChildDummyMessage('Hey'); + $envelope = Envelope::wrap($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); $next = $this->createPartialMock(\stdClass::class, array('__invoke')); @@ -77,15 +80,16 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageParentClass() DummyMessage::class => true, )); - $sender->expects($this->once())->method('send')->with(Envelope::wrap($message)); + $sender->expects($this->once())->method('send')->with($envelope); $next->expects($this->once())->method($this->anything()); - $middleware->handle($message, $next); + $middleware->handle($envelope, $next); } public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageInterface() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); $next = $this->createPartialMock(\stdClass::class, array('__invoke')); @@ -93,15 +97,16 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageInterface() DummyMessageInterface::class => true, )); - $sender->expects($this->once())->method('send')->with(Envelope::wrap($message)); + $sender->expects($this->once())->method('send')->with($envelope); $next->expects($this->once())->method($this->anything()); - $middleware->handle($message, $next); + $middleware->handle($envelope, $next); } public function testItAlsoCallsTheNextMiddlewareBasedOnWildcard() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); $next = $this->createPartialMock(\stdClass::class, array('__invoke')); @@ -109,22 +114,23 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnWildcard() '*' => true, )); - $sender->expects($this->once())->method('send')->with(Envelope::wrap($message)); + $sender->expects($this->once())->method('send')->with($envelope); $next->expects($this->once())->method($this->anything()); - $middleware->handle($message, $next); + $middleware->handle($envelope, $next); } public function testItCallsTheNextMiddlewareWhenNoSenderForThisMessage() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $next = $this->createPartialMock(\stdClass::class, array('__invoke')); $middleware = new SendMessageMiddleware(new InMemorySenderLocator(null)); $next->expects($this->once())->method($this->anything()); - $middleware->handle($message, $next); + $middleware->handle($envelope, $next); } public function testItSkipsReceivedMessages() diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/ValidationMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/ValidationMiddlewareTest.php index b2a44b5fa672..23964c2e45e5 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/ValidationMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/ValidationMiddlewareTest.php @@ -24,6 +24,7 @@ class ValidationMiddlewareTest extends TestCase public function testValidateAndNextMiddleware() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $validator = $this->createMock(ValidatorInterface::class); $validator @@ -36,11 +37,11 @@ public function testValidateAndNextMiddleware() $next ->expects($this->once()) ->method('__invoke') - ->with($message) + ->with($envelope) ->willReturn('Hello') ; - $result = (new ValidationMiddleware($validator))->handle($message, $next); + $result = (new ValidationMiddleware($validator))->handle($envelope, $next); $this->assertSame('Hello', $result); } @@ -48,7 +49,6 @@ public function testValidateAndNextMiddleware() public function testValidateWithConfigurationAndNextMiddleware() { $envelope = Envelope::wrap($message = new DummyMessage('Hey'))->with(new ValidationConfiguration($groups = array('Default', 'Extra'))); - $validator = $this->createMock(ValidatorInterface::class); $validator ->expects($this->once()) @@ -76,6 +76,7 @@ public function testValidateWithConfigurationAndNextMiddleware() public function testValidationFailedException() { $message = new DummyMessage('Hey'); + $envelope = Envelope::wrap($message); $violationList = $this->createMock(ConstraintViolationListInterface::class); $violationList @@ -96,6 +97,6 @@ public function testValidationFailedException() ->method('__invoke') ; - (new ValidationMiddleware($validator))->handle($message, $next); + (new ValidationMiddleware($validator))->handle($envelope, $next); } }