Download the PHP package ashleydawson/domain-event-dispatcher without Composer
On this page you can find all versions of the php package ashleydawson/domain-event-dispatcher. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ashleydawson/domain-event-dispatcher
More information about ashleydawson/domain-event-dispatcher
Files in ashleydawson/domain-event-dispatcher
Package domain-event-dispatcher
Short Description Dispatch or defer domain events from a singleton. Handy if you're using DDD and need a singleton domain dispatcher for models.
License MIT
Informations about the package domain-event-dispatcher
Domain Event Dispatcher
Singleton domain event dispatcher to be used during DDD. The domain event dispatcher is a singleton so it can be easily used from within your model.
Installation
Install via Composer using the following command:
Basic Usage
Define an event to be dispatched. Event classes can be anything, and should be easily serialized.
Define a listener for the event
Put it all together, add your listeners and dispatch.
Listener Types
There are two types of listeners:
General
- invoked by any domain event.Typed
- invoked by events of a corresponding type.
General Listener
In a previous example, we saw the event dispatcher used for typed events where the event argument is type hinted in the
__invoke()
method of the event listener. General listeners are invoked by all events and don't have a type hint. For example:
Typed Listener
A typed listener only responds to a particular type of domain event:
Deferred Events
Sometimes it might be useful to dispatch events later in the application flow. To do this, events may be deferred and dispatched later.
Domain Event Storage
For event publication, notification or auditing purposes you may need to store events in an event store. To do this, simply
implement the EventStoreInterface
:
Then configure the event dispatcher to use the event store:
Important: If configured with an event store, the event dispatcher will attempt to store every event. If you don't
want the event dispatcher to store a particular event, implement DisposableEventInterface
on the event:
Tests
To run the test suite, run the following: