dinecat / cqrs
提供命令、事件和查询总线及其功能。
v4.0.1
2024-01-07 08:25 UTC
Requires
- php: ^8.1
- symfony/messenger: ^5.4|^6.0|^7.0
- symfony/property-access: ^5.4|^6.0|^7.0
- symfony/validator: ^5.4|^6.0|^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
README
Symfony Messenger 组件的扩展,提供命令、查询和事件消息总线及相关功能。
在 Symfony 项目中使用
查看: https://symfony.com.cn/doc/current/messenger.html#multiple-buses-command-event-buses
在 config/packages/messenger.php (或 yaml) 中设置总线
$messenger = $framework->messenger(); $commandBus = $messenger->bus('command.bus'); $commandBus->middleware()->id('validation'); $commandBus->middleware()->id('doctrine_transaction'); $queryBus = $messenger->bus('query.bus'); $queryBus->middleware()->id('validation'); $eventBus = $messenger->bus('event.bus'); $eventBus->defaultMiddleware()->enabled(true)->allowNoHandlers(true)->allowNoSenders(true);
framework: messenger: default_bus: 'command.bus' buses: command.bus: middleware: - 'validation' query.bus: middleware: - 'validation' event.bus: default_middleware: enabled: true allow_no_handlers: true allow_no_senders: true middleware: []
在 config/services.php (或 yaml) 中限制每个总线的处理器
$services ->instanceof(CommandHandlerInterface::class) ->tag('messenger.message_handler', ['bus' => 'command.bus']); $services ->instanceof(QueryHandlerInterface::class) ->tag('messenger.message_handler', ['bus' => 'query.bus']); $services ->instanceof(EventHandlerInterface::class) ->tag('messenger.message_handler', ['bus' => 'event.bus']);
services: _instanceof: Dinecat\CQRS\CommandBus\CommandHandlerInterface: tags: - { name: 'messenger.message_handler', bus: 'command.bus' } Dinecat\CQRS\QueryBus\QueryHandlerInterface: tags: - { name: 'messenger.message_handler', bus: 'query.bus' } Dinecat\CQRS\EventBus\EventHandlerInterface: tags: - { name: 'messenger.message_handler', bus: 'event.bus' }