Skip to content

Repository files navigation

Domain Events

Domain Events Implementation

Install

composer require itmedia/domain-events

How to use

DomainEvent:

<?phpuseItmedia\DomainEvents\Event\DomainEvent;
class AccountRegistrationEvent implements DomainEvent
{
/** * @var Account */private$account;
publicfunction__construct(Account$account)
{
$this->account = $account;
}
publicfunctiongetName():string
{
return'account_register';
}
// ...
}

Entity implement interface DomainEventPublisher :

<?phpuseItmedia\DomainEvents\Publisher\DomainEventPublisher;
useItmedia\DomainEvents\Publisher\DomainEventPublisherTrait;
class Account implements DomainEventPublisher
{
use DomainEventPublisherTrait; // Helper traitpublicstaticfunctionregister($email)
{
$account = newself();
//...$account->pushEvent(newAccountRegistrationEvent($account));
// Checked single event$account->pushSingleEvent(newMyEvent($account));
$account->pushSingleEvent(newMyEvent($account));
return$account;
}
}

Use Doctrine ORM and Symfony events

Translation domain-event to symfony events on Doctrine postFlush() action:

# services.ymlservices:
# Translate domain event to symfony eventsItmedia\DomainEvents\Bridge\SymfonyDomainEventTranslatorDispatcher:
arguments: ['@event_dispatcher', '@logger', '%kernel.debug%']# Handle domain-eventsItmedia\DomainEvents\Bridge\DoctrineDomainEventsHandler:
arguments: ['@Itmedia\DomainEvents\Bridge\SymfonyDomainEventTranslatorDispatcher']tags:
- { name: doctrine.event_listener, event: postFlush }
- { name: doctrine.event_listener, event: preFlush }

About

Domain events + symfony bridge

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages