cptburke / symfony-messenger-application-bundle
bundle to use symfony-messenger-application (query, command, event, ...) in your symfony application
Installs: 59
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=8.0
- cptburke/symfony-messenger-application: ^0.1.1
- symfony/config: 5.3.*
- symfony/dependency-injection: 5.3.*
- symfony/http-kernel: 5.3.*
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/test-pack: ^1.0
This package is not auto-updated.
Last update: 2024-04-18 12:24:48 UTC
README
bundle to use symfony-messenger-application (query, command, event, ...) in your symfony application
Installation
composer require cptburke/symfony-messenger-application-bundle
Configuration
This bundle tags classes that implement one of these interfaces via autoconfiguration:
CptBurke\Application\Query\QueryHandler
gets tagged withmessenger_application.query.handler
CptBurke\Application\Command\CommandHandler
gets tagged withmessenger_application.command.handler
CptBurke\Application\Domain\DomainEventSubscriber
gets tagged withmessenger_application.domain_event.subscriber
CptBurke\Application\Event\ApplicationEventSubscriber
gets tagged withmessenger_application.application_event.subscriber
It also pre-configures several buses:
messenger_application.query.bus
Query bus with autoconfigured mapping for handlers that implementCptBurke\Application\Query\QueryHandler
messenger_application.domain_event.bus
Domain event bus with autoconfigured mapping for subscribers that implementCptBurke\Application\Domain\DomainEventSubscriber
messenger_application.command.bus
Command bus that takes anSymfony\Messenger\MessageBusInterface
which can be configured throughservices.yaml
,messenger.yaml
messenger_application.application_event.bus
Application event bus that takes anSymfony\Messenger\MessageBusInterface
which can be configured throughservices.yaml
,messenger.yaml
config/packages/messenger_application.yaml
The minimal configuration contains services for the command bus and the application event bus (if you want to use them in your application).
config/services.yaml
#... command.handler_middleware: factory: [CptBurke\Application\SymfonyMessengerBundle\Factory\HandlerMiddlewareStackFactory, createCallables] arguments: - !tagged_iterator messenger_application.command.handler #...
config/packages/messenger.yaml
buses: #... command.bus: default_middleware: false middleware: - doctrine_transaction - command.handler_middleware
messenger_application: # service id of the configured symfony message bus command_bus: 'command.bus' # service id of the configured symfony message bus application_event_bus: 'app.async_bus' query_bus: # middleware before query gets handled before_handle: - Acme\Middleware\SomeMiddleware # middleware after query was handled after_handle: [] domain_event_bus: before_handle: - 'app.middleware.some_middleware' after_handle: - Acme\Middleware\LoggerMiddleware
Usage
Example
<?php use CptBurke\Application\Query\QueryBus; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class SampleController extends AbstractController { public function sampleAction(QueryBus $bus) { $data = $bus->ask(new GetDataQuery()); // or $data = $this->get(QueryBus::class)->ask(new GetDataQuery()); // or $data = $this->get('messenger_application.query.bus')->ask(new GetDataQuery()); return $this->json($data); }