itmedia / domain-events
域事件实现
v1.0.1
2021-09-10 15:52 UTC
Requires
- php: ^7.2.5 || ^8.0
- psr/log: *
- symfony/event-dispatcher-contracts: *
Requires (Dev)
- doctrine/orm: ^2.4
- phpunit/phpunit: ^6.0 || ^7.0
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 }