Aimez-vous SymfonyComponentEventDispatcherEventSubscriberInterface et sa méthode getSubscribeEvents() ?
class AwesomeSubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ HappyEvent::class => 'happy', CoolEvent::class => 'coll', ]; } public function happy(HappyEvent $event): void {} public function coll(CoolEvent $event): void {} }
Je déteste ça !
Oui, le nouveau Symfony a l'attribut #[AsEventListener], mais que se passe-t-il si vous utilisez un autre framework ou une ancienne version d'event-dispatcher ou si vous n'aimez pas les attributs ?
Il existe une solution simple ?
Voir ce trait https://github.com/Zarganwar/symfony-event-dispatcher-utils.
Cela vous offre un moyen simple (automatique) de vous abonner aux événements avec la méthode __invoke.
class AwesomeSubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface { use AutoEventSubscriberTrait; // <<<--- This is it! ❤️ public function __invoke(HappyEvent|AnotherEvent $event): void {} }
ou SRP abonné par événement
class HappySubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface { use AutoEventSubscriberTrait; public function __invoke(HappyEvent $event): void {} } class CoolSubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface { use AutoEventSubscriberTrait; public function __invoke(CoolEvent $event): void {} }
Bien sûr, vous pouvez utiliser des interfaces et des types d'union.
Allez sur https://github.com/Zarganwar/symfony-event-dispatcher-utils et installez
le compositeur nécessite zarganwar/symfony-event-dispatcher-utils
Profitez-en ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!