ホームページ  >  記事  >  バックエンド開発  >  単純なトレイトを使用して Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() を自動化する

単純なトレイトを使用して Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() を自動化する

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 18:10:11279ブラウズ

Automate Symfony\Component\EventDispatcher\EventSubscriberInterface::getSubscribedEvents() with simple Trait

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 {}

}

嫌だ!

  1. テキスト形式のメソッド名表現を含む配列
  2. イベント クラス名が複数回書き込まれていますか?

はい、新しい 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。