Search by

selyusize / events-router

selyusize

Роутер событий для PHP: шаблоны топиков, группы и middleware в стиле Slim, несколько слушателей на событие, совместим с PSR-14.

v0.7.5 2026-10-11 12:07 UTC

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