Skip to content

Commit 733ad1e

Browse files
Исправлен README.md и PHPDoc
1 parent dad9854 commit 733ad1e

File tree

3 files changed

+106
-4
lines changed

3 files changed

+106
-4
lines changed

README.md

+103-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
[![PHP Version Require](http://poser.pugx.org/mepihindeveloper/php-event-dispatcher/require/php)](https://packagist.org/packages/mepihindeveloper/php-event-dispatcher)
66
![license](https://img.shields.io/github/license/mepihindeveloper/php-event-dispatcher)
77

8-
![build](https://github.com/mepihindeveloper/php-event-dispatcher/actions/workflows/php.yml/badge.svg?branch=development)
9-
[![codecov](https://codecov.io/gh/mepihindeveloper/php-event-dispatcher/branch/development/graph/badge.svg?token=36PP7VKHKG)](https://codecov.io/gh/mepihindeveloper/php-event-dispatcher)
8+
![build](https://github.com/mepihindeveloper/php-event-dispatcher/actions/workflows/php.yml/badge.svg?branch=stable)
9+
[![codecov](https://codecov.io/gh/mepihindeveloper/php-event-dispatcher/branch/stable/graph/badge.svg?token=36PP7VKHKG)](https://codecov.io/gh/mepihindeveloper/php-event-dispatcher)
1010

1111
Компонент для работы с событиями и слушателями
1212

@@ -16,19 +16,118 @@
1616
src/
1717
--- exceptions/
1818
------ EventNotFoundException.php
19+
------ ListenerNotFoundException
1920
--- interfaces/
2021
------ ListenerInterface.php
2122
--- Event.php
2223
--- EventDispatcher.php
2324
--- ListenerProvider.php
2425
```
2526

27+
В директории `interfaces` хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации
28+
собственного класса `Listener`. Класс `Listener` выступает в качестве слушателя события и должен реализовать метод
29+
`process`. В директории `exceptions` хранятся необходимые исключения. Исключение `EventNotFoundException` необходимо
30+
для идентификации ошибки поиска события (когда событие не было найдено), аналогично и для `ListenerNotFoundException`.
31+
32+
Класс `Event` реализует само событие. Собственные события должны наследоваться от класса `Event`.
33+
34+
Класс `EventDispatcher` реализует диспетчер событий, который работает через `ListenerProvider`, выступая посредником.
35+
36+
Класс `ListenerProvider` реализует поставщика слушателей, где происходят все операции со слушателями и событиями.
37+
38+
Примерная реализация событий и слушателей:
39+
40+
```php
41+
<?php
42+
43+
declare(strict_types = 1);
44+
45+
use mepihindeveloper\components\Event;
46+
use mepihindeveloper\components\EventDispatcher;
47+
use mepihindeveloper\components\interfaces\ListenerInterface;
48+
use mepihindeveloper\components\ListenerProvider;
49+
use Psr\EventDispatcher\StoppableEventInterface;
50+
51+
require_once __DIR__ . '/vendor/autoload.php';
52+
53+
class Event1 extends Event { }
54+
55+
class Event2 extends Event { }
56+
57+
class Event1Listener1 implements ListenerInterface {
58+
public function process(StoppableEventInterface $event) {
59+
echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL;
60+
}
61+
}
62+
63+
class Event2Listener1 implements ListenerInterface {
64+
public function process(StoppableEventInterface $event) {
65+
echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL;
66+
}
67+
}
68+
69+
class Event2Listener2 implements ListenerInterface {
70+
public function process(StoppableEventInterface $event) {
71+
echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL;
72+
}
73+
}
74+
75+
class AllEventsListener implements ListenerInterface {
76+
public function process(StoppableEventInterface $event) {
77+
echo "Я " . get_class($this) . " слушаю событие " . get_class($event) . PHP_EOL;
78+
}
79+
}
80+
81+
$event1 = new Event1;
82+
$event2 = new Event2;
83+
$event1Listener1 = new Event1Listener1;
84+
$event2Listener1 = new Event2Listener1;
85+
$event2Listener2 = new Event2Listener2;
86+
$allEventsListener = new AllEventsListener;
87+
88+
$listenerProvider = new ListenerProvider;
89+
$listenerProvider
90+
->addListenerForEventType($event1Listener1, Event1::class)
91+
->addListenerForEventType($event2Listener1, Event2::class)
92+
->addListenerForEventType($event2Listener2, Event2::class)
93+
->addListenerForEventType($allEventsListener);
94+
95+
$dispatcher = new EventDispatcher($listenerProvider);
96+
$dispatcher->dispatch($event1);
97+
$dispatcher->dispatch($event2);
98+
```
99+
26100

27101
# Доступные методы
28102

29-
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
30-
|-------------------------------|------------------------------------|---------------------|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
103+
## Event
104+
105+
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
106+
|----------------------|-----------|---------------------|------------|-------------------------------------------------|
107+
| stopPropagation | | void | | Останавливает работу (распространение) события |
108+
| isPropagationStopped | | bool | | См. Psr\EventDispatcher\StoppableEventInterface |
109+
110+
## EventDispatcher
111+
112+
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
113+
|----------------------------------------------------------|------------------------------|---------------------------|------------------------|----------------------------------------|
114+
| __construct(ListenerProviderInterface $listenerProvider | Провайдер слушателей событий | void | | |
115+
| dispatch(object $event) | Объект события | bool | EventNotFoundException | Отправляет событие слушателям |
116+
| getListenerProvider | | ListenerProviderInterface | | Получает провайдера слушателей событий |
117+
118+
## ListenerProvider
31119

120+
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
121+
|--------------------------------------------------------------------------------------------------------|---------------------------------------------------|---------------------|---------------------------------------------------|---------------------------------------------------|
122+
| addListenerForEventType(ListenerInterface $listener, string $eventType = self::DEFAULT_EVENT_TYPE) | $listener - Слушатель; $eventType - Тип события | ListenerProvider | | Добавляет слушателя |
123+
| removeListenerFromEventType(ListenerInterface $listener, string $eventType = self::DEFAULT_EVENT_TYPE) | $listener - Слушатель; $eventType - Тип события | ListenerProvider | EventNotFoundException; ListenerNotFoundException | Удаляет слушателя события |
124+
| hasListenerInEventType(ListenerInterface $listener, string $eventType = self::DEFAULT_EVENT_TYPE) | $listener - Слушатель; $eventType - Тип события | bool | EventNotFoundException | Проверяет наличие слушателя в событии |
125+
| hasEventType(string $eventType = self::DEFAULT_EVENT_TYPE) | Тип события | bool | | Проверяет наличие типа события |
126+
| removeListenersForEventType(string $eventType = self::DEFAULT_EVENT_TYPE) | Тип события | ListenerProvider | EventNotFoundException | Удаляет слушателей события |
127+
| removeListeners | | ListenerProvider | | Удаляет всех слушателей всех событий |
128+
| getListenersForEvent(object $event) | См. Psr\EventDispatcher\ListenerProviderInterface | iterable | EventNotFoundException | См. Psr\EventDispatcher\ListenerProviderInterface |
129+
| getListenersForEventType(string $eventType) | Тип события | array | EventNotFoundException | Получает слушателей события |
130+
| getListeners | | array | | Получает всех слушателей всех событий |
32131

33132
# Контакты
34133

src/EventDispatcher.php

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public function __construct(ListenerProviderInterface $listenerProvider) {
3131

3232
/**
3333
* @inheritDoc
34+
*
35+
* @throws EventNotFoundException
3436
*/
3537
public function dispatch(object $event) {
3638
if ($event instanceof StoppableEventInterface && $event->isPropagationStopped()) {

src/ListenerProvider.php

+1
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ public function removeListeners(): self {
133133

134134
/**
135135
* @inheritDoc
136+
* @throws EventNotFoundException
136137
*/
137138
public function getListenersForEvent(object $event): iterable {
138139
return $this->getListenersForEventType(get_class($event));

0 commit comments

Comments
 (0)