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 が必要です
お楽しみください! ?
以上が単純なトレイトを使用して Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() を自動化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。