mepihindeveloper / php-event-dispatcher
Component for working with events
Requires
- php: >=7.4
- psr/event-dispatcher: ^1.0
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
This package is auto-updated.
Last update: 2024-10-22 14:04:25 UTC
README
Компонент для работы с событиями и слушателями
Структура
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 declare(strict_types = 1); use mepihindeveloper\components\Event; use mepihindeveloper\components\EventDispatcher; use mepihindeveloper\components\interfaces\ListenerInterface; use mepihindeveloper\components\ListenerProvider; use Psr\EventDispatcher\StoppableEventInterface; require_once __DIR__ . '/vendor/autoload.php'; class Event1 extends Event { } class Event2 extends Event { } class Event1Listener1 implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } class Event2Listener1 implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } class Event2Listener2 implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } class AllEventsListener implements ListenerInterface { public function process(StoppableEventInterface $event) { echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL; } } $event1 = new Event1; $event2 = new Event2; $event1Listener1 = new Event1Listener1; $event2Listener1 = new Event2Listener1; $event2Listener2 = new Event2Listener2; $allEventsListener = new AllEventsListener; $listenerProvider = new ListenerProvider; $listenerProvider ->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
EventDispatcher
ListenerProvider
Контакты
Вы можете связаться со мной в социальной сети ВКонтакте: ВКонтакте: Максим Епихин
Если удобно писать на почту, то можете воспользоваться этим адресом: mepihindeveloper@gmail.com
Мой канал на YouTube, который посвящен разработке веб и игровых проектов: YouTube: Максим Епихин
Поддержать меня можно переводом на Яндекс.Деньги: Денежный перевод