/event-listener-bundle

The symfony bundle with event listener functionality

Primary LanguagePHPApache License 2.0Apache-2.0

Event Listener Bundle

Symfony bundle добавляющий поддержку event-listener описания событий

Смотри документ проектирование для понимания, что? зачем? почему?

Использование

Генерация событий

  1. Описать интерфейсы слушателей событий
namespace MyProject\MyPackage\Events;

use Keepper\EventListener\Contract\ListenerInterface;

interface MyEventListener extends ListenerInterface {
    public function onMyEventFired(int $someParamOne, string SomeParamTwo = null);
}
  1. В класс, который будет генерировать какое либо событие добавить 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');
        
        // ...
    }
}
  1. При конфигурации класс, который генерирует событие, добавить информацию о интерфейсах слушателя
    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

Подписка слушателя событий

  1. Написать класс реализующий какой либо из интерфейсов обработчиков событий
namespace MyProject\AnotherPackage\Listeners;

use MyProject\MyPackage\Events\MyEventListener;

class SomeMyEventListener implements MyEventListener {

    public function onMyEventFired(
        int $someParamOne, 
        string SomeParamTwo = null
    ) {
        // Do something
    }    
}
  1. При конфигурации отметить тегом слушателя событий
    MyProject\AnotherPackage\Listeners\SomeMyEventListener:
    tags:
      - name: event.listener.interface