selyusize / events-router
Роутер событий для PHP: шаблоны топиков, группы и middleware в стиле Slim, несколько слушателей на событие, совместим с PSR-14.
Requires
- php: ^8.1
- php-di/php-di: ^7.0
- psr/container: ^1.1 || ^2.0
- psr/event-dispatcher: ^1.0
- psr/log: ^2.0 || ^3.0
- webmozart/assert: ^1.11
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- overtrue/phplint: ^9.0
- phpunit/phpunit: ^10.5
- saggre/phpdocumentor-markdown: ^1.0
- symfony/event-dispatcher: ^6.4 || ^7.4
- vimeo/psalm: ^6.19
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-19 10:25:56 UTC
README
Роутер событий для PHP. Маршруты событий описываются так же, как HTTP-маршруты в Slim: шаблоны топиков с параметрами, группы, middleware на группах и маршрутах. На одно событие можно повесить несколько слушателей. Совместим с PSR-14.
Документация: https://selyusize.github.io/events-router/
Slim-style event router for PHP: topic patterns with parameters, groups and middleware, several listeners per event, PSR-14 compatible. Library messages are in Russian by default;
EventRouterFactory::create($container, ['locale' => 'en'])switches them to English. Documentation is in Russian.
return static function (EventRouter $events): void { $events->setPrefix('shop'); $events->group('order', static function (RouteGroup $group): void { $group->listen('created', Listener\ReserveStock::class); $group->listen('created', Listener\SendConfirmationEmail::class); $group->listen('{order_id}.paid', Listener\MarkOrderPaid::class); }) ->add(Middleware\EventLogger::class); };
$events = EventRouterFactory::create($container); // контейнер необязателен: по умолчанию PHP-DI $events->loadRoutes(require __DIR__ . '/events.php'); $report = $events->dispatch(new Event('shop.order.42.paid', ['amount' => 1500]));
final class MarkOrderPaid implements ListenerInterface { public static function handle(EventInterface $event): void { // $event->getAttribute('order_id') === '42' } }
Установка
composer require selyusize/events-router
PHP 8.1+. Версия 0.x: API может меняться до 1.0, изменения — в CHANGELOG.
Возможности
- шаблоны топиков:
order.{order_id}.paid,order.{id:\d+},order.*.cancelled,order.#; - группы и middleware как в Slim, порядок слушателей — порядок строк в файле;
- отчёт о рассылке, изоляция ошибок слушателей, стратегии ошибок;
- контейнер из коробки (PHP-DI) или свой PSR-11;
- лог в файл по шаблону пути
{level}/{date}.log, при желании — каждая рассылка со всеми слушателями; - PSR-14 адаптер, воркеры с источниками событий;
- мост к Bitrix: события Bitrix и свои события проекта — в одном файле маршрутов;
- сообщения на русском или английском:
'locale' => 'en'; - кэш маршрутов: запрос PHP-FPM (200 слушателей, 3 рассылки) в 1,8 раза быстрее
symfony/event-dispatcher; рассылка в воркере медленнее в 2,3 раза — подробности на странице «Производительность» (make bench).
Разработка
make install # зависимости make check # всё, что проверяет CI: phplint, php-cs-fixer, Psalm, PHPUnit make cs-fix # исправить стиль кода make docs-install # один раз: Python-окружение для сайта документации make docs-serve # сайт документации локально: http://127.0.0.1:8000
В docker-окружении: make check RUN="dl exec".
Лицензия
MIT