Symfony bundle добавляющий поддержку event-listener описания событий
Смотри документ проектирование для понимания, что? зачем? почему?
- Описать интерфейсы слушателей событий
namespace MyProject\MyPackage\Events;
use Keepper\EventListener\Contract\ListenerInterface;
interface MyEventListener extends ListenerInterface {
public function onMyEventFired(int $someParamOne, string SomeParamTwo = null);
}
- В класс, который будет генерировать какое либо событие добавить DI Dispatcher и код генерации события.
namespace MyProject\MyPackage\Services;
use MyProject\MyPackage\Events\MyEventListener;
class MyCoolService {
/**
* @var NotificationDispatcher
*/
private $dispatcher;
public function __construct(
NotificationDispatcher $dispatcher
) {
$this->dispatcher = $dispatcher;
}
public function someBussinesLogic() {
// ...
// Генерируем событие
$this->dispatcher->dispatch(MyEventListener::class, 1, 'two');
// ...
}
}
- При конфигурации класс, который генерирует событие, добавить информацию о интерфейсах слушателя
MyProject\MyPackage\Services\MyCoolService:
tags:
- name: listener.interface
interface: MyProject\MyPackage\Events\MyEventListener
Или, если их несколько:
MyProject\MyPackage\Services\MyCoolService:
tags:
- name: listener.interface
interface:
- MyProject\MyPackage\Events\MyEventListenerOne
- MyProject\MyPackage\Events\MyEventListenerTwo
- Написать класс реализующий какой либо из интерфейсов обработчиков событий
namespace MyProject\AnotherPackage\Listeners;
use MyProject\MyPackage\Events\MyEventListener;
class SomeMyEventListener implements MyEventListener {
public function onMyEventFired(
int $someParamOne,
string SomeParamTwo = null
) {
// Do something
}
}
- При конфигурации отметить тегом слушателя событий
MyProject\AnotherPackage\Listeners\SomeMyEventListener:
tags:
- name: event.listener.interface