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!
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!