diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index e055f5f8bea53..7655a444170ed 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -2352,6 +2352,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $defaultMiddleware = [ 'before' => [ + ['id' => 'add_self_stampable_stamps_middleware'], ['id' => 'add_bus_name_stamp_middleware'], ['id' => 'reject_redelivered_message_middleware'], ['id' => 'dispatch_after_current_bus'], diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php index e02cd1ca34c0d..0811e5ba44fb6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php @@ -26,6 +26,7 @@ use Symfony\Component\Messenger\EventListener\StopWorkerOnRestartSignalListener; use Symfony\Component\Messenger\Handler\RedispatchMessageHandler; use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware; +use Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware; use Symfony\Component\Messenger\Middleware\DeduplicateMiddleware; use Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware; use Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware; @@ -93,6 +94,8 @@ service('lock.factory'), ]) + ->set('messenger.middleware.add_self_stampable_stamps_middleware', AddSelfStampableStampsMiddleware::class) + ->set('messenger.middleware.add_bus_name_stamp_middleware', AddBusNameStampMiddleware::class) ->abstract() diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php index b5f5f1ef5dc95..76784a8532292 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php @@ -1070,6 +1070,7 @@ public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware() $this->assertTrue($container->has('messenger.bus.commands')); $this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0)); $this->assertEquals([ + ['id' => 'add_self_stampable_stamps_middleware'], ['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']], ['id' => 'reject_redelivered_message_middleware'], ['id' => 'dispatch_after_current_bus'], @@ -1080,6 +1081,7 @@ public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware() $this->assertTrue($container->has('messenger.bus.events')); $this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0)); $this->assertEquals([ + ['id' => 'add_self_stampable_stamps_middleware'], ['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']], ['id' => 'reject_redelivered_message_middleware'], ['id' => 'dispatch_after_current_bus'], @@ -1112,6 +1114,7 @@ public function testMessengerWithAddBusNameStampMiddleware() $this->assertTrue($container->has('messenger.bus.events')); $this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0)); $this->assertEquals([ + ['id' => 'add_self_stampable_stamps_middleware'], ['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']], ['id' => 'reject_redelivered_message_middleware'], ['id' => 'dispatch_after_current_bus'], @@ -1132,6 +1135,7 @@ public function testMessengerWithMultipleBusesWithDeduplicateMiddleware() $this->assertTrue($container->has('messenger.bus.commands')); $this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0)); $this->assertEquals([ + ['id' => 'add_self_stampable_stamps_middleware'], ['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']], ['id' => 'reject_redelivered_message_middleware'], ['id' => 'dispatch_after_current_bus'], @@ -1143,6 +1147,7 @@ public function testMessengerWithMultipleBusesWithDeduplicateMiddleware() $this->assertTrue($container->has('messenger.bus.events')); $this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0)); $this->assertEquals([ + ['id' => 'add_self_stampable_stamps_middleware'], ['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']], ['id' => 'reject_redelivered_message_middleware'], ['id' => 'dispatch_after_current_bus'], diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index ff3f8bd2e3bff..a07cc91e0eef1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -52,7 +52,7 @@ "symfony/http-client": "^6.4|^7.0|^8.0", "symfony/lock": "^6.4|^7.0|^8.0", "symfony/mailer": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/messenger": "^7.4|^8.0", "symfony/mime": "^6.4|^7.0|^8.0", "symfony/notifier": "^6.4|^7.0|^8.0", "symfony/object-mapper": "^7.3|^8.0", @@ -92,7 +92,7 @@ "symfony/form": "<6.4", "symfony/lock": "<6.4", "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", + "symfony/messenger": "<7.4", "symfony/mime": "<6.4", "symfony/property-info": "<6.4", "symfony/property-access": "<6.4", diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 35aa38b9315f2..5f537c3d24041 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Allow any `ServiceResetterInterface` implementation in `ResetServicesListener` + * Add `Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware` and `Symfony\Component\Messenger\Message\SelfStampableInterface` 7.3 --- diff --git a/src/Symfony/Component/Messenger/Message/SelfStampableInterface.php b/src/Symfony/Component/Messenger/Message/SelfStampableInterface.php new file mode 100644 index 0000000000000..ab0c9257c763b --- /dev/null +++ b/src/Symfony/Component/Messenger/Message/SelfStampableInterface.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Message; + +use Symfony\Component\Messenger\Stamp\StampInterface; + +interface SelfStampableInterface +{ + /** + * List of stamps which will be automatically added to the envelope, + * if there is no other stamp of the same class already set. + * + * @return array + */ + public function getDefaultStamps(): array; +} diff --git a/src/Symfony/Component/Messenger/Middleware/AddSelfStampableStampsMiddleware.php b/src/Symfony/Component/Messenger/Middleware/AddSelfStampableStampsMiddleware.php new file mode 100644 index 0000000000000..c9c4f7f882c0b --- /dev/null +++ b/src/Symfony/Component/Messenger/Middleware/AddSelfStampableStampsMiddleware.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Middleware; + +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Message\SelfStampableInterface; + +/** + * Automatically add stamps from the SelfStampableInterface. + */ +class AddSelfStampableStampsMiddleware implements MiddlewareInterface +{ + public function handle(Envelope $envelope, StackInterface $stack): Envelope + { + $message = $envelope->getMessage(); + if ($message instanceof SelfStampableInterface) { + foreach ($message->getDefaultStamps() as $stamp) { + if (null === $envelope->last($stamp::class)) { + $envelope = $envelope->with($stamp); + } + } + } + + return $stack->next()->handle($envelope, $stack); + } +} diff --git a/src/Symfony/Component/Messenger/Tests/Fixtures/SelfStampableDummyMessage.php b/src/Symfony/Component/Messenger/Tests/Fixtures/SelfStampableDummyMessage.php new file mode 100644 index 0000000000000..dce60744d671e --- /dev/null +++ b/src/Symfony/Component/Messenger/Tests/Fixtures/SelfStampableDummyMessage.php @@ -0,0 +1,23 @@ +message; + } + + public function getDefaultStamps(): array + { + return [new DelayStamp(1)]; + } +} diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/AddSelfStampableStampsMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/AddSelfStampableStampsMiddlewareTest.php new file mode 100644 index 0000000000000..978149e9e7e14 --- /dev/null +++ b/src/Symfony/Component/Messenger/Tests/Middleware/AddSelfStampableStampsMiddlewareTest.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Tests\Middleware; + +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Middleware\AddSelfStampableStampsMiddleware; +use Symfony\Component\Messenger\Stamp\DelayStamp; +use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase; +use Symfony\Component\Messenger\Tests\Fixtures\SelfStampableDummyMessage; + +final class AddSelfStampableStampsMiddlewareTest extends MiddlewareTestCase +{ + public function testSelfStampableStampsMiddleware() + { + $message = new SelfStampableDummyMessage(''); + $envelope = new Envelope($message); + + $decorator = new AddSelfStampableStampsMiddleware(); + + $envelope = $decorator->handle($envelope, $this->getStackMock(true)); + + $delayStamp = $envelope->last(DelayStamp::class); + $this->assertNotNull($delayStamp); + $this->assertSame(1, $delayStamp->getDelay()); + } + + public function testSelfStampableStampsMiddlewareIfStampExists() + { + $message = new SelfStampableDummyMessage(''); + $envelope = new Envelope($message, [new DelayStamp(5)]); + + $decorator = new AddSelfStampableStampsMiddleware(); + + $envelope = $decorator->handle($envelope, $this->getStackMock(true)); + + $delayStamp = $envelope->last(DelayStamp::class); + $this->assertNotNull($delayStamp); + $this->assertSame(5, $delayStamp->getDelay()); + } +} 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