bornfree / tactician-doctrine-domain-events
提供使用 Tactician 命令总线与 Doctrine ORM 处理领域事件的桥梁
0.4.0
2017-11-19 20:50 UTC
Requires
- php: >=5.4
- bornfreee/tactician-domain-events: ^0.3.0
- doctrine/orm: ^2.2
Requires (Dev)
- phpunit/phpunit: ^5.7
README
提供使用 Tactician 命令总线与 Doctrine ORM 处理领域事件的桥梁
安装
通过 composer 安装
composer require bornfree/tactician-doctrine-domain-events
用法
使用 事件记录器功能,可以让 Doctrine ORM 收集领域事件,并随后由 EventDispatcher
处理。
确保你的实体实现了 ContainsRecordedMessages
接口。使用来自 Tactician Domain Events 库的 EventRecorderCapabilities
特性,从实体内部方便地记录事件
use BornFree\TacticianDomainEvent\Recorder\ContainsRecordedEvents; use BornFree\TacticianDomainEvent\Recorder\EventRecorderCapabilities; class Task implements ContainsRecordedMessages { use EventRecorderCapabilities; public function __construct($name) { $this->record(new TaskWasCreated($name)); } }
然后为 Doctrine 实体设置 事件记录器
use BornFree\TacticianDoctrineDomainEvent\EventListener\CollectsEventsFromEntities; $eventRecorder = new CollectsEventsFromEntities(); $entityManager->getConnection()->getEventManager()->addEventSubscriber($eventRecorder);
Syfmony 集成
此监听器将自动与 Symfony 注册,请参阅 文档
事件记录器将遍历在上次数据库事务中涉及的 所有实体,并收集它们内部记录的事件。
数据库事务成功完成后,这些事件应由 EventDispatcher
处理。这是通过添加到命令总线的特定中间件来完成的,该中间件应在处理事务的中间件之前添加。
use League\Tactician\CommandBus; use League\Tactician\Doctrine\ORM\TransactionMiddleware; use namespace BornFree\TacticianDomainEvent\Middleware\ReleaseRecordedEventsMiddleware; // see the previous sections about $eventRecorder and $eventDispatcher $releaseRecordedEventsMiddleware = new ReleaseRecordedEventsMiddleware($eventRecorder, $eventDispatcher); $commandBus = new CommandBus( [ $releaseRecordedEventsMiddleware, // it should be before transaction middleware $transactionMiddleware, $commandHandlerMiddleware ] );
许可证
版权所有 (c) 2017, Maks Rafalko
在 MIT 许可证下,请参阅 LICENSE 文件。