Idag ska vi lära oss hur vi använder komponenten Symfony Event Dispatcher, som låter dig skapa händelser och lyssnare i dina PHP-applikationer. Således kan olika komponenter i din ansökan prata med varandra med löst kopplad kod.
Du kan vara bekant med händelseobservatörsmönstret, där du kan definiera lyssnare för systemgenererade händelser så att de körs när händelsen utlöses. På samma sätt låter Symfony EventDispatcher-komponenten dig skapa ett system där du kan skapa anpassade händelser och lyssnare. På det sättet tillåter du att komponenter i din ansökan ska reagera om något händer i ett system.
Faktum är att händelsespedagogkomponenten innehåller tre element som du kan bygga din apparkitektur runt:händelse, lyssnare och avsändare. Hela systemet är orkestrerat av avsändarklassen, vilket väcker händelser på lämpliga punkter i en applikation och kallar lyssnare som hör samman med dessa händelser.
Låt oss anta att du vill tillåta andra komponenter i din ansökan att reagera när cachen är klar. I så fall måste du definiera clear cache-händelsen i första hand. När cachen har rensats kan du använda avsändaren för att hämta clear cache-händelsen och meddela alla lyssnare som lyssnar på den här händelsen. Detta ger lyssnarna möjlighet att rensa komponentspecifika cacher.
I den här artikeln kommer vi att utforska grunderna i händelsespedagogkomponenten. Vi börjar med installation och konfiguration, och vi ska också skapa några exempel på verkligheten för att visa alla de ovan nämnda begreppen.
I det här avsnittet kommer vi att installera komponenten för händelsespedagog. Jag antar att du redan har installerat Composer på ditt system, för vi behöver det för att installera EventDispatcher-komponenten.
När du har installerat Composer, fortsätt och installera EventDispatcher-komponenten med följande kommando.
$ kompositör kräver symfoni / händelse-dispatcher
Det borde ha skapat composer.json fil som ska se ut så här:
"kräver": "sympfony / event-dispatcher": "^ 4.1"
Låt oss ytterligare redigera composer.json filen för att se ut som följande:
"krav": "sympfony / event-dispatcher": "^ 4.1", "autoload": "psr-4": "EventDispatchers \\": "src", "klasskarta": ["src "]
När vi har lagt till en ny klasskortsinmatning, fortsätt och uppdatera kompositörs autoloader genom att köra följande kommando.
$ kompositör dumpa -o
Nu kan du använda EventDispatchers
namnrymd till autoload klasser under src katalog.
Så det är installationsdelen, men hur ska du använda den? Faktum är att det bara handlar om att inkludera autoload.php fil skapad av kompositören i din ansökan, som visas i följande kod.
I det här avsnittet går vi igenom ett exempel som visar hur du kan skapa en anpassad händelse och skapa en lyssnare för den händelsen.
Till att börja med, fortsätt och skapa src / Events / DemoEvent.php fil med följande innehåll.
foo = "bar"; offentlig funktion getFoo () returnera $ this-> foo;
Våra egna DemoEvent
klassen utökar kärnan Händelse
klassen av EventDispatcher-komponenten. De NAMN
konstant håller namnet på vår anpassade händelse-demo.event
. Den används när du vill ställa in en lyssnare för den här händelsen.
Låt oss sedan skapa lyssnarklassen src / Lyssnare / DemoListener.php med följande innehåll.
getFoo () "\ n".;
De DemoListener
klassen implementerar onDemoEvent
metod som utlöses när systemet skickar DemoEvent
händelse. Självklart kommer det inte att hända automatiskt ännu, eftersom vi behöver registrera DemoListener
lyssnare att lyssna på demo.event
händelse med EventDispatcher-klassen.
Hittills har vi skapat evenemangs- och lyssnarklasser. Därefter ser vi hur man binder alla dessa stycken tillsammans.
Låt oss skapa basic_example.php fil med följande innehåll.
addListener ('demo.event', array ($ lyssnare, 'onDemoEvent')); // leverans $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());
De EventDispatcher
klassen är det viktigaste elementet i EventDispatcher-komponenten. Det låter dig binda lyssnare till händelser som de vill lyssna på. Vi har använt addListener
metod för EventDispatcher
klass att lyssna på demo.event
händelse.
Det första argumentet från addListener
Metoden är ett händelse namn, och det andra argumentet är PHP-callable som utlöses när den registrerade händelsen skickas. I vårt fall har vi tillhandahållit DemoListener
objekt som en lyssnare tillsammans med onDemoEvent
metod.
$ dispatcher-> addListener ('demo.event', array ($ lyssnare, 'onDemoEvent'));
Slutligen har vi använt avsändande
metod för EventDispatcher
klass för att skicka demo.event
händelse.
$ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());
När du kör basic_example.php fil, ska den producera följande utmatning.
$ php basic_example.php DemoListener heter! Värdet på foo är: bar
Som förväntat onDemoEvent
metod för DemoListener
klass kallas, och som i sin tur kallar getFoo
metod för DemoEvent
klass för att hämta händelsesrelaterad information.
I det föregående avsnittet byggde vi ett exempel som visade hur man skapar en anpassad händelse och en anpassad lyssnare. Vi diskuterade också hur man binder en lyssnare till den specifika händelsen med hjälp av EventDispatcher
klass.
Det var ett enkelt exempel, eftersom vi bara ville skapa en lyssnare för en enda händelse. Om du däremot vill skapa lyssnare för flera händelser eller vill logga logiskt i händelsehanteringslogiken i en enda klass, bör du överväga att använda händelseabonnenter eftersom de tillåter dig att hålla allt på ett ställe.
I det här avsnittet granskar vi det exempel som skapades i föregående avsnitt.
Det första vi behöver göra är att skapa en abonnentklass som implementerar EventSubscriberInterface
gränssnitt. Gå vidare och skapa src / Subsribers / DemoSubscriber.php klass som visas i följande kod.
"on DemoEvent",); public function on DemoEvent (DemoEvent $ event) // hämta händelseinformation här echo "DemoListener heter! \ n"; echo "Värdet på foo är:". $ event-> getFoo (). "\ n";
Sedan klassen DemoSubscriber
implementerar EventSubscriberInterface
gränssnitt, måste det implementera getSubscribedEvents
metod. De getSubscribedEvents
Metoden ska returnera en rad händelser som du vill prenumerera på. Du måste ange händelsens namn i en matrisnyckel och metodnamnet i ett matrisvärde som kallas när händelsen utlöses.
Det sista är att genomföra lyssnarmetoden i samma klass. I vårt fall måste vi genomföra onDemoEvent
metod, och vi har redan gjort det.
Det är dags att testa vår abonnent! Låt oss snabbt skapa subscriber_example.php fil med följande innehåll.
addSubscriber ($ abonnent); // leverans $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());
Du måste använda addSubscriber
metod för EventDispatcher
klass för att prenumerera på din anpassade abonnent, och EventDispatcher
klass hanterar resten. Det hämtar händelser som ska prenumerera från getSubscribedEvents
metod och skapar lyssnare för dessa händelser. Bortsett från det är allt detsamma, och det ska fungera som förväntat utan några överraskningar.
Låt oss testa det!
$ php subscriber_example.php DemoListener heter! Värdet på foo är: bar
Och det var en händelse abonnent till ditt förfogande! Det ger oss också till slutet av denna artikel.
Idag utforskade vi komponenten Symfony Event Dispatcher, som låter dig konfigurera händelser och lyssnare i dina PHP-applikationer. Genom att använda det här biblioteket kan du skapa ett löst kopplat system som gör det möjligt för komponenter i din applikation att kommunicera med varandra utan problem.
Gärna dela dina tankar och frågor med hjälp av formuläret nedan!