首頁 > 後端開發 > php教程 > 使用簡單的 Trait 自動化 Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents()

使用簡單的 Trait 自動化 Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents()

Patricia Arquette
發布: 2024-11-27 18:10:11
原創
344 人瀏覽過

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

享受吧! ?

以上是使用簡單的 Trait 自動化 Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents()的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板