Skip to content

Commit dad9854

Browse files
committed
Merge branch 'development' into stable
# Conflicts: # README.md
2 parents 250df15 + 2f764a9 commit dad9854

15 files changed

+607
-197
lines changed

README.md

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,34 @@
1-
# php-configuration
1+
# php-event-dispatcher
22

3-
![release](https://img.shields.io/github/v/release/mepihindeveloper/php-configuration?label=version)
4-
[![Packagist Version](https://img.shields.io/packagist/v/mepihindeveloper/php-configuration)](https://packagist.org/packages/mepihindeveloper/php-configuration)
5-
[![PHP Version Require](http://poser.pugx.org/mepihindeveloper/php-configuration/require/php)](https://packagist.org/packages/mepihindeveloper/php-configuration)
6-
![license](https://img.shields.io/github/license/mepihindeveloper/php-configuration)
3+
![release](https://img.shields.io/github/v/release/mepihindeveloper/php-event-dispatcher?label=version)
4+
[![Packagist Version](https://img.shields.io/packagist/v/mepihindeveloper/php-event-dispatcher)](https://packagist.org/packages/mepihindeveloper/php-event-dispatcher)
5+
[![PHP Version Require](http://poser.pugx.org/mepihindeveloper/php-event-dispatcher/require/php)](https://packagist.org/packages/mepihindeveloper/php-event-dispatcher)
6+
![license](https://img.shields.io/github/license/mepihindeveloper/php-event-dispatcher)
77

8-
![build](https://github.com/mepihindeveloper/php-configuration/actions/workflows/php.yml/badge.svg?branch=stable)
9-
[![codecov](https://codecov.io/gh/mepihindeveloper/php-configuration/branch/stable/graph/badge.svg?token=36PP7VKHKG)](https://codecov.io/gh/mepihindeveloper/php-configuration)
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)
1010

11-
Компонент для работы с конфигурацией (настройками) приложения, модулей и компонентов
11+
Компонент для работы с событиями и слушателями
1212

1313
# Структура
1414

1515
```
1616
src/
17+
--- exceptions/
18+
------ EventNotFoundException.php
1719
--- interfaces/
18-
--- Configuration.php
20+
------ ListenerInterface.php
21+
--- Event.php
22+
--- EventDispatcher.php
23+
--- ListenerProvider.php
1924
```
2025

21-
В директории `interfaces` хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации
22-
собственного класса `Configuration`.
23-
24-
Класс `Configuration` реализует интерфейс `ConfigurationInterface` для управления конфигурацией (настройками)
25-
приложения, модулей и компонентов.
2626

2727
# Доступные методы
2828

2929
| Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
3030
|-------------------------------|------------------------------------|---------------------|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
31-
| __construct(array $settings) | $settings Массив настроек | | | Конструктор |
32-
| getSettings(): array | | array | | Возвращает массив настроек |
33-
| setSettings(array $settings) | $settings Настройки [key => value] | void | | Устанавливает настройку |
34-
| getSettingsByKey(string $key) | $key Ключ | mixed | InvalidArgumentException | Возвращает настройки по ключу. Здесь могут быть как отдельные настройки, так и массив настроек (например, для какой-то категории) |
35-
| hasKey(string $key) | $key Ключ | bool | | Проверяет наличие ключа в настройках |
31+
3632

3733
# Контакты
3834

composer.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
{
2-
"name": "mepihindeveloper/php-configuration",
3-
"description": "Component for working with settings",
2+
"name": "mepihindeveloper/php-event-dispatcher",
3+
"description": "Component for working with events",
44
"type": "library",
55
"license": "MIT",
66
"keywords": [
77
"component",
88
"class",
99
"php",
10-
"settings",
11-
"configuration"
10+
"event",
11+
"dispatcher",
12+
"listner"
1213
],
1314
"authors": [
1415
{
@@ -17,7 +18,8 @@
1718
}
1819
],
1920
"require": {
20-
"php": ">=7.4"
21+
"php": ">=7.4",
22+
"psr/event-dispatcher": "^1.0"
2123
},
2224
"autoload": {
2325
"psr-4": {

src/Configuration.php

Lines changed: 0 additions & 65 deletions
This file was deleted.

src/Event.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
namespace mepihindeveloper\components;
6+
7+
use Psr\EventDispatcher\StoppableEventInterface;
8+
9+
/**
10+
* Класс Event
11+
*
12+
* Реализует логику работы события
13+
*
14+
* @package mepihindeveloper\components
15+
*/
16+
class Event implements StoppableEventInterface {
17+
18+
/** @var bool Показывает, должны ли слушатели события учитывать событие */
19+
private bool $isPropagationStopped = false;
20+
21+
/**
22+
* Останавливает работу (распространение) события
23+
*
24+
* @return void
25+
*/
26+
public function stopPropagation(): void {
27+
$this->isPropagationStopped = true;
28+
}
29+
30+
/**
31+
* @inheritDoc
32+
*/
33+
public function isPropagationStopped(): bool {
34+
return $this->isPropagationStopped;
35+
}
36+
}

src/EventDispatcher.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
5+
namespace mepihindeveloper\components;
6+
7+
use mepihindeveloper\components\exceptions\EventNotFoundException;
8+
use mepihindeveloper\components\interfaces\ListenerInterface;
9+
use Psr\EventDispatcher\EventDispatcherInterface;
10+
use Psr\EventDispatcher\ListenerProviderInterface;
11+
use Psr\EventDispatcher\StoppableEventInterface;
12+
13+
/**
14+
* Класс EventDispatcher
15+
*
16+
* Реализует логику работы с событиями
17+
*
18+
* @package mepihindeveloper\components
19+
*/
20+
class EventDispatcher implements EventDispatcherInterface {
21+
22+
/** @var ListenerProviderInterface Провайдер слушателей событий */
23+
private ListenerProviderInterface $listenerProvider;
24+
25+
/**
26+
* @param ListenerProviderInterface $listenerProvider Провайдер слушателей событий
27+
*/
28+
public function __construct(ListenerProviderInterface $listenerProvider) {
29+
$this->listenerProvider = $listenerProvider;
30+
}
31+
32+
/**
33+
* @inheritDoc
34+
*/
35+
public function dispatch(object $event) {
36+
if ($event instanceof StoppableEventInterface && $event->isPropagationStopped()) {
37+
return $event;
38+
}
39+
40+
$eventListeners = $this->listenerProvider->getListenersForEvent($event);
41+
42+
try {
43+
$defaultEventListeners = $this->listenerProvider->getListenersForEventType($this->listenerProvider::DEFAULT_EVENT_TYPE);
44+
} catch (EventNotFoundException $exception) {
45+
$defaultEventListeners = [];
46+
}
47+
48+
$listeners = !empty($defaultEventListeners) ? array_merge($eventListeners, $defaultEventListeners) : $eventListeners;
49+
50+
/** @var ListenerInterface $listener */
51+
foreach ($listeners as $listener) {
52+
$listener->process($event);
53+
}
54+
55+
return $event;
56+
}
57+
58+
/**
59+
* Получает провайдера слушателей событий
60+
*
61+
* @return ListenerProviderInterface Провайдер слушателей событий
62+
*/
63+
public function getListenerProvider(): ListenerProviderInterface {
64+
return $this->listenerProvider;
65+
}
66+
}

0 commit comments

Comments
 (0)