你喜歡SymfonyComponentEventDispatcherEventSubscriberInterface及其getSubscribedEvents()方法嗎?
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 {} }
我討厭它!
是的,新的 Symfony 有屬性 #[AsEventListener],但是如果你使用其他框架或舊版本的事件調度程式或你不喜歡屬性怎麼辦?
有簡單的解決方案嗎?
請參閱此特徵 https://github.com/Zarganwar/symfony-event-dispatcher-utils。
這為您提供了一種簡單(自動)的方式來訂閱 __invoke 方法的事件。
class AwesomeSubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface { use AutoEventSubscriberTrait; // <<<--- This is it! ❤️ public function __invoke(HappyEvent|AnotherEvent $event): void {} }
或 SRP 每個活動的訂戶
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 {} }
當然,您可以使用介面和聯合類型。
前往 https://github.com/Zarganwar/symfony-event-dispatcher-utils 並安裝
作曲家需要 zarganwar/symfony-event-dispatcher-utils
享受吧! ?
以上是使用簡單的 Trait 自動化 Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents()的詳細內容。更多資訊請關注PHP中文網其他相關文章!