cloud-castle/listener

PSR-14 провайдер слушателей для PHP 8.1+: регистрация обработчиков атрибутом #[AsListener], автообнаружение через рефлексию и приоритеты. Дополняет любой PSR-14 диспетчер (напр. cloud-castle/event).

Maintainers

Package info

gitverse.ru/cloud-castle/listener

Homepage

Issues

Documentation

pkg:composer/cloud-castle/listener

Transparency log

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

v1.0.2 2026-07-29 08:35 UTC

This package is auto-updated.

Last update: 2026-07-30 06:02:46 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Listener

CloudCastle Listener

Packagist Version Downloads PHP Version License

PSR-14 поставщик слушателей с автоопределением типа события по рефлексии: тип берётся из первого параметра слушателя, срабатывание — на подтипы, порядок — по приоритету. Пакетная регистрация методов через атрибут.

Установка

composer require cloud-castle/listener

Требуется PHP 8.1+. Единственная зависимость — psr/event-dispatcher.

Быстрый старт

<?php

use CloudCastle\Listener\Attribute\AsListener;
use CloudCastle\Listener\ReflectionListenerProvider;

$provider = new ReflectionListenerProvider();

// Тип события выводится из сигнатуры — указывать его отдельно не нужно.
$provider->listen(static function (OrderPaid $event): void {
    // ...
}, priority: 10);

// Пакетная регистрация: все методы с #[AsListener].
final class OrderSubscriber
{
    #[AsListener(priority: 5)]
    public function onPaid(OrderPaid $event): void { /* ... */ }
}
$provider->subscribe(new OrderSubscriber());

// Совместим с любым PSR-14 диспетчером.
foreach ($provider->getListenersForEvent(new OrderPaid()) as $listener) {
    $listener($event);
}

Возможности

  • Автоопределение типа событияlisten() берёт тип из первого параметра слушателя через рефлексию; отдельно указывать имя события не нужно.
  • Срабатывание на подтипы — слушатель события-родителя (или интерфейса) вызывается и для его наследников (проверка instanceof).
  • Приоритеты — порядок вызова по убыванию приоритета (по умолчанию 0).
  • Регистрация через атрибут #[AsListener]subscribe() подключает все помеченные публичные методы объекта разом.
  • PSR-14 — реализует ListenerProviderInterface, работает с любым совместимым диспетчером (например, cloud-castle/event).

Сравнение с аналогами

Возможностьlistenersymfony/event-dispatcherleague/eventyiisoft/event-dispatchercrell/tukiocloud-castle/event
PSR-14 ListenerProvider
Автотип по рефлексии🏆 ✅⚠️
Срабатывание на подтипы🏆 ✅⚠️
Регистрация через атрибуты⚠️
Приоритеты⚠️
Runtime-зависимостей🏆 1 (PSR)2+12+2+1

Когда применять. listener уместен, когда нужен PSR-14 провайдер с удобной привязкой слушателей по типу (без строкового имени события) и атрибутами, без привязки к фреймворку. За самим диспетчером обращайтесь к cloud-castle/event или любому PSR-14. Если нужен полный event-стек с подписчиками и остановкой распространения из коробки — берите symfony/event-dispatcher или crell/tukio.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano