bornfree/tactician-doctrine-domain-events

提供使用 Tactician 命令总线与 Doctrine ORM 处理领域事件的桥梁

0.4.0 2017-11-19 20:50 UTC

This package is auto-updated.

Last update: 2024-09-13 20:15:17 UTC


README

Build Status codecov Scrutinizer Code Quality Latest Stable Version

提供使用 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 文件。