Do you like SymfonyComponentEventDispatcherEventSubscriberInterface and it's getSubscribedEvents() method?
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 {} }
I hate it!
Yes, new Symfony has attribute #[AsEventListener], but what if you use another framework or older version of event-dispatcher or you don't like attributes?
There is simple solution ?
See this trait https://github.com/Zarganwar/symfony-event-dispatcher-utils.
That provides you with a simple (automatic) way to subscribe to events to __invoke method.
class AwesomeSubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface { use AutoEventSubscriberTrait; // <<<--- This is it! ❤️ public function __invoke(HappyEvent|AnotherEvent $event): void {} }
or SRP subscriber per event
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 {} }
Of course, you can use interfaces and union types.
Go to https://github.com/Zarganwar/symfony-event-dispatcher-utils and install
composer require zarganwar/symfony-event-dispatcher-utils
Enjoy! ?
The above is the detailed content of Automate Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() with simple Trait. For more information, please follow other related articles on the PHP Chinese website!