Basic usage

To use events EventDispatcher class instance must be created and give some event configuration in constructor or special setEventConfiguration method. That configuration must have event code (used for event trigger) and list of listeners that will executed on each event trigger.

$eventDispatcher = new EventDispatcher;
$eventDispatcher->setEventConfiguration([
    'event_code' => [
        'object'    => 'ClassEvent\Event\BaseEvent',
        'listeners' => [
            function ($attr, $event) {
                echo 'Listener was executed';
            },
        ]
    ]
]);

After that we can launch event trigger method to execute listeners.

$eventDispatcher->triggerEvent('event_code');

After executing each triggerEvent method we her message Listener was executed.

Listener

Listener is everything that is acceptable by call_user_func function. So listener can be namespace and method separated by ::, anonymous function, or array where firs parameter is object and second method to execute.
All listeners on list are executed after trigger event in order that is the same as the listeners on the list.
Each listener get two parameters. First is array of additional parameters that was given in triggerEvent method. Second is instance of Event object, that was given in object key on event configuration or ClassEvent\Event\BaseEvent when that object was not specified.

$eventDispatcher->triggerEvent(
    'event_code',
    [
        'parameter_one' => 'value a',
        'parameter_two' => 'value b',
    ]
);

Add listener by method

Their is also possibility to set listeners via special method. To do that use addEventListener method that take two attributes. First is event code and second list of listeners.
If EventObject don't exists for given event code than default EventObject will be used.