itmedia/domain-events

v1.0.1 2021-09-10 15:52 UTC

This package is auto-updated.

Last update: 2024-09-10 22:40:26 UTC


README

域事件实现

安装

composer require itmedia/domain-events

如何使用

DomainEvent

<?php

use Itmedia\DomainEvents\Event\DomainEvent;

class AccountRegistrationEvent implements DomainEvent
{
    /**
     * @var Account
     */
    private $account;


    public function __construct(Account $account)
    {
        $this->account = $account;
    }


    public function getName():string
    {
        return 'account_register';
    }

    // ...

}

实体实现接口 DomainEventPublisher

<?php

use Itmedia\DomainEvents\Publisher\DomainEventPublisher;
use Itmedia\DomainEvents\Publisher\DomainEventPublisherTrait;

class Account implements DomainEventPublisher
{
    use DomainEventPublisherTrait; // Helper trait

    public static function register($email)
    {
        $account = new self();

        //...

        $account->pushEvent(new AccountRegistrationEvent($account));
        
        // Checked single event
        $account->pushSingleEvent(new MyEvent($account));
        $account->pushSingleEvent(new MyEvent($account));

        return $account;
    }


}

使用 Doctrine ORM 和 Symfony 事件

在 Doctrine postFlush() 动作中将翻译域事件转换为 symfony 事件

# services.yml

services:

    # Translate domain event to symfony events
    Itmedia\DomainEvents\Bridge\SymfonyDomainEventTranslatorDispatcher:
        arguments: ['@event_dispatcher', '@logger', '%kernel.debug%']


    # Handle domain-events
    Itmedia\DomainEvents\Bridge\DoctrineDomainEventsHandler:
        arguments: ['@Itmedia\DomainEvents\Bridge\SymfonyDomainEventTranslatorDispatcher']
        tags:
            - { name: doctrine.event_listener, event: postFlush }
            - { name: doctrine.event_listener, event: preFlush }