https://github.com/maksimepikhin/php-event-dispatcher
Компонент для работы с событиями и слушателями
https://github.com/maksimepikhin/php-event-dispatcher
dispatcher event listener-pattern php
Last synced: 5 months ago
JSON representation
Компонент для работы с событиями и слушателями
- Host: GitHub
- URL: https://github.com/maksimepikhin/php-event-dispatcher
- Owner: maksimepikhin
- License: mit
- Created: 2022-02-21T14:09:53.000Z (over 4 years ago)
- Default Branch: stable
- Last Pushed: 2022-02-22T08:08:54.000Z (over 4 years ago)
- Last Synced: 2025-07-24T09:26:13.505Z (11 months ago)
- Topics: dispatcher, event, listener-pattern, php
- Language: PHP
- Homepage:
- Size: 35.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# php-event-dispatcher

[](https://packagist.org/packages/mepihindeveloper/php-event-dispatcher)
[](https://packagist.org/packages/mepihindeveloper/php-event-dispatcher)


[](https://codecov.io/gh/mepihindeveloper/php-event-dispatcher)
Компонент для работы с событиями и слушателями
# Структура
```
src/
--- exceptions/
------ EventNotFoundException.php
------ ListenerNotFoundException
--- interfaces/
------ ListenerInterface.php
--- Event.php
--- EventDispatcher.php
--- ListenerProvider.php
```
В директории `interfaces` хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации
собственного класса `Listener`. Класс `Listener` выступает в качестве слушателя события и должен реализовать метод
`process`. В директории `exceptions` хранятся необходимые исключения. Исключение `EventNotFoundException` необходимо
для идентификации ошибки поиска события (когда событие не было найдено), аналогично и для `ListenerNotFoundException`.
Класс `Event` реализует само событие. Собственные события должны наследоваться от класса `Event`.
Класс `EventDispatcher` реализует диспетчер событий, который работает через `ListenerProvider`, выступая посредником.
Класс `ListenerProvider` реализует поставщика слушателей, где происходят все операции со слушателями и событиями.
Примерная реализация событий и слушателей:
```php
addListenerForEventType($event1Listener1, Event1::class)
->addListenerForEventType($event2Listener1, Event2::class)
->addListenerForEventType($event2Listener2, Event2::class)
->addListenerForEventType($allEventsListener);
$dispatcher = new EventDispatcher($listenerProvider);
$dispatcher->dispatch($event1);
$dispatcher->dispatch($event2);
```
# Доступные методы
## Event
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
|----------------------|-----------|---------------------|------------|-------------------------------------------------|
| stopPropagation | | void | | Останавливает работу (распространение) события |
| isPropagationStopped | | bool | | См. Psr\EventDispatcher\StoppableEventInterface |
## EventDispatcher
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
|----------------------------------------------------------|------------------------------|---------------------------|------------------------|----------------------------------------|
| __construct(ListenerProviderInterface $listenerProvider | Провайдер слушателей событий | void | | |
| dispatch(object $event) | Объект события | bool | EventNotFoundException | Отправляет событие слушателям |
| getListenerProvider | | ListenerProviderInterface | | Получает провайдера слушателей событий |
## ListenerProvider
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
|--------------------------------------------------------------------------------------------------------|---------------------------------------------------|---------------------|---------------------------------------------------|---------------------------------------------------|
| addListenerForEventType(ListenerInterface $listener, string $eventType = self::DEFAULT_EVENT_TYPE) | $listener - Слушатель; $eventType - Тип события | ListenerProvider | | Добавляет слушателя |
| removeListenerFromEventType(ListenerInterface $listener, string $eventType = self::DEFAULT_EVENT_TYPE) | $listener - Слушатель; $eventType - Тип события | ListenerProvider | EventNotFoundException; ListenerNotFoundException | Удаляет слушателя события |
| hasListenerInEventType(ListenerInterface $listener, string $eventType = self::DEFAULT_EVENT_TYPE) | $listener - Слушатель; $eventType - Тип события | bool | EventNotFoundException | Проверяет наличие слушателя в событии |
| hasEventType(string $eventType = self::DEFAULT_EVENT_TYPE) | Тип события | bool | | Проверяет наличие типа события |
| removeListenersForEventType(string $eventType = self::DEFAULT_EVENT_TYPE) | Тип события | ListenerProvider | EventNotFoundException | Удаляет слушателей события |
| removeListeners | | ListenerProvider | | Удаляет всех слушателей всех событий |
| getListenersForEvent(object $event) | См. Psr\EventDispatcher\ListenerProviderInterface | iterable | EventNotFoundException | См. Psr\EventDispatcher\ListenerProviderInterface |
| getListenersForEventType(string $eventType) | Тип события | array | EventNotFoundException | Получает слушателей события |
| getListeners | | array | | Получает всех слушателей всех событий |
# Контакты
Вы можете связаться со мной в социальной сети ВКонтакте: [ВКонтакте: Максим Епихин](https://vk.com/maximepihin)
Если удобно писать на почту, то можете воспользоваться этим адресом: mepihindeveloper@gmail.com
Мой канал на YouTube, который посвящен разработке веб и игровых
проектов: [YouTube: Максим Епихин](https://www.youtube.com/channel/UCKusRcoHUy6T4sei-rVzCqQ)
Поддержать меня можно переводом на Яндекс.Деньги: [Денежный перевод](https://yoomoney.ru/to/410012382226565)