diff --git a/.env b/.env index 726c7e5..ce77eb6 100644 --- a/.env +++ b/.env @@ -18,3 +18,7 @@ MAILER_DSN=null://null ###> symfony/notifier ### NOTIFIER_DSN=null://null ###< symfony/notifier ### + +###> symfony/messenger ### +MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 +###< symfony/messenger ### diff --git a/composer.json b/composer.json index 9b4622f..503b12d 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "symfony/framework-bundle": "8.1.*", "symfony/http-client": "8.1.*", "symfony/mailer": "8.1.*", + "symfony/messenger": "8.1.*", "symfony/notifier": "8.1.*", "symfony/runtime": "8.1.*", "symfony/security-bundle": "8.1.*", diff --git a/composer.lock b/composer.lock index 57ec3d5..f032061 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "daf25551631f2160dd16661390f08af8", + "content-hash": "14e30357887f3cf354c208f7d12e95ee", "packages": [ { "name": "doctrine/dbal", @@ -2848,6 +2848,98 @@ ], "time": "2026-05-29T05:06:50+00:00" }, + { + "name": "symfony/messenger", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "c095398338a8e6f5ae6579ebb2092b7a16b7df72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/c095398338a8e6f5ae6579ebb2092b7a16b7df72", + "reference": "c095398338a8e6f5ae6579ebb2092b7a16b7df72", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/log": "^1|^2|^3", + "symfony/clock": "^7.4|^8.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<7.4", + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/lock": "<7.4", + "symfony/serializer": "<7.4.4|>=8.0,<8.0.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4.4|^8.0.4", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v8.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-29T05:06:50+00:00" + }, { "name": "symfony/mime", "version": "v8.1.0", @@ -5771,12 +5863,12 @@ "source": { "type": "git", "url": "https://github.com/Codeception/module-symfony.git", - "reference": "7d9317fe13da9e8521558f79b0fa3bd0a5c197da" + "reference": "7f0cd5d5ef89658ed1a56185bf33047477686fc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-symfony/zipball/7d9317fe13da9e8521558f79b0fa3bd0a5c197da", - "reference": "7d9317fe13da9e8521558f79b0fa3bd0a5c197da", + "url": "https://api.github.com/repos/Codeception/module-symfony/zipball/7f0cd5d5ef89658ed1a56185bf33047477686fc5", + "reference": "7f0cd5d5ef89658ed1a56185bf33047477686fc5", "shasum": "" }, "require": { @@ -5810,6 +5902,7 @@ "symfony/http-foundation": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/http-kernel": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/mailer": "^5.4 | ^6.4 | ^7.4 | ^8.0", + "symfony/messenger": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/mime": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/notifier": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/options-resolver": "^5.4 | ^6.4 | ^7.4 | ^8.0", @@ -5869,7 +5962,7 @@ "issues": "https://github.com/Codeception/module-symfony/issues", "source": "https://github.com/Codeception/module-symfony/tree/main" }, - "time": "2026-06-23T20:14:24+00:00" + "time": "2026-06-25T19:43:59+00:00" }, { "name": "codeception/stub", diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 0000000..6dc4cfa --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,7 @@ +framework: + mailer: + message_bus: false + messenger: + default_bus: messenger.bus.default + buses: + messenger.bus.default: ~ diff --git a/config/routes.php b/config/routes.php index 32532ff..0e941cd 100644 --- a/config/routes.php +++ b/config/routes.php @@ -100,4 +100,8 @@ $routes->add('app_create_user_with_confirmation', '/create-user-with-confirmation') ->controller(App\Controller\CreateUserWithConfirmationController::class) ->methods(['GET']); + + $routes->add('dispatch_message', '/dispatch-message') + ->controller(App\Controller\DispatchMessageController::class) + ->methods(['GET']); }; diff --git a/src/Controller/DispatchMessageController.php b/src/Controller/DispatchMessageController.php new file mode 100644 index 0000000..c8ef4c7 --- /dev/null +++ b/src/Controller/DispatchMessageController.php @@ -0,0 +1,25 @@ +bus->dispatch(new SendWelcomeMessage('jane_doe@example.com')); + + return $this->json(['message' => 'Message dispatched']); + } +} diff --git a/src/Message/SendWelcomeMessage.php b/src/Message/SendWelcomeMessage.php new file mode 100644 index 0000000..bfbb856 --- /dev/null +++ b/src/Message/SendWelcomeMessage.php @@ -0,0 +1,18 @@ +email; + } +} diff --git a/src/MessageHandler/SendWelcomeMessageHandler.php b/src/MessageHandler/SendWelcomeMessageHandler.php new file mode 100644 index 0000000..db4a12d --- /dev/null +++ b/src/MessageHandler/SendWelcomeMessageHandler.php @@ -0,0 +1,16 @@ +amOnPage('/dispatch-message'); + $I->seeDispatchedMessageCount(1); + $I->seeDispatchedMessageCount(1, 'messenger.bus.default'); + } + + public function seeMessageDispatched(FunctionalTester $I): void + { + $I->amOnPage('/dispatch-message'); + $I->seeMessageDispatched(SendWelcomeMessage::class); + $I->seeMessageDispatched(SendWelcomeMessage::class, 'messenger.bus.default'); + } + + public function dontSeeMessageDispatched(FunctionalTester $I): void + { + $I->amOnPage('/dispatch-message'); + $I->dontSeeMessageDispatched(stdClass::class); + } + + public function grabDispatchedMessageClasses(FunctionalTester $I): void + { + $I->amOnPage('/dispatch-message'); + $messages = $I->grabDispatchedMessageClasses(); + $I->assertSame([SendWelcomeMessage::class], $messages); + } + + public function noMessagesDispatched(FunctionalTester $I): void + { + $I->amOnPage('/'); + $I->seeDispatchedMessageCount(0); + $I->assertSame([], $I->grabDispatchedMessageClasses()); + } +}