Rumah >pembangunan bahagian belakang >tutorial php >Automatikkan Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() dengan Trait mudah

Automatikkan Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() dengan Trait mudah

Patricia Arquette
Patricia Arquetteasal
2024-11-27 18:10:11308semak imbas

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

Adakah anda suka SymfonyComponentEventDispatcherEventSubscriberInterface dan ia adalah kaedah 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 {}

}

Saya benci!

  1. Susunatur dengan perwakilan nama kaedah tekstual
  2. Nama kelas acara ditulis beberapa kali ?

Ya, Symfony baharu mempunyai atribut #[AsEventListener], tetapi bagaimana jika anda menggunakan rangka kerja lain atau versi lama penghantar acara atau anda tidak menyukai atribut?

Ada penyelesaian mudah ?
Lihat sifat ini https://github.com/Zarganwar/symfony-event-dispatcher-utils.
Itu memberi anda cara mudah (automatik) untuk melanggan acara untuk kaedah __invoke.

class AwesomeSubscriber implements Symfony\Component\EventDispatcher\EventSubscriberInterface
{
    use AutoEventSubscriberTrait; // <<<--- This is it! ❤️

    public function __invoke(HappyEvent|AnotherEvent $event): void {}

}

atau SRP pelanggan setiap acara

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

}

Sudah tentu, anda boleh menggunakan antara muka dan jenis kesatuan.

Pergi ke https://github.com/Zarganwar/symfony-event-dispatcher-utils dan pasang

komposer memerlukan zarganwar/symfony-event-dispatcher-utils

Selamat mencuba! ?

Atas ialah kandungan terperinci Automatikkan Symfony\\Component\\EventDispatcher\\EventSubscriberInterface::getSubscribedEvents() dengan Trait mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn