Hoe de Symfony Event Dispatcher voor PHP te gebruiken

Vandaag gaan we leren hoe je de Symfony-gebeurtenis dispatcher-component kunt gebruiken, waarmee je evenementen en luisteraars in je PHP-applicaties kunt maken. Dus, verschillende componenten van uw applicatie kunnen met elkaar praten met losjes gekoppelde code.

Wat is de Symfony Event Dispatcher Component?

U bent misschien bekend met het patroon van gebeurteniswaarnemers, waarmee u luisteraars kunt definiëren voor door het systeem gegenereerde gebeurtenissen, zodat ze worden uitgevoerd wanneer de gebeurtenis wordt geactiveerd. Op dezelfde manier kunt u met de Symfony EventDispatcher-component een systeem opzetten waarin u aangepaste evenementen en luisteraars kunt maken. Op die manier geeft u toe dat componenten in uw toepassing reageren als iets gebeurt in een systeem.

In feite biedt de gebeurtenisverdelercomponent drie elementen waarmee u uw app-architectuur kunt bouwen:gebeurtenis, luisteraar en coördinator. Het hele systeem wordt georkestreerd door de dispatcher-klasse, die gebeurtenissen op gepaste punten in een toepassing oproept en luisteraars die aan deze evenementen zijn gekoppeld, oproept..

Laten we aannemen dat je andere componenten in je applicatie wilt laten reageren wanneer de cache wordt gewist. In dat geval moet u de clear cache-gebeurtenis op de eerste plaats definiëren. Nadat de cache is gewist, kunt u de dispatcher gebruiken om de clear cache -gebeurtenis op te heffen, en dat meldt alle luisteraars die naar deze gebeurtenis luisteren. Dit geeft luisteraars de mogelijkheid om component-specifieke caches te zuiveren.

In dit artikel zullen we de basisprincipes van de gebeurtenisverdelercomponent verkennen. We beginnen met de installatie en configuratie, en we zullen ook een paar voorbeelden uit de praktijk creëren om alle bovengenoemde concepten te demonstreren.

Installatie en configuratie van de gebeurtenisverzender

In deze sectie gaan we de component gebeurtenisverzender installeren. Ik ga ervan uit dat Composer al op uw systeem is geïnstalleerd, omdat we het nodig hebben om de component EventDispatcher te installeren.

Nadat u Composer hebt geïnstalleerd, kunt u de component EventDispatcher installeren met behulp van de volgende opdracht.

$ composer vereist symfony / event-dispatcher

Dat zou de composer.json bestand, dat er als volgt uit moet zien:

"require": "symfony / event-dispatcher": "^ 4.1"

Laten we de. Verder bewerken composer.json bestand om er als volgt uit te zien:

"require": "symfony / event-dispatcher": "^ 4.1", "autoload": "psr-4": "EventDispatchers \\": "src", "classmap": ["src "]

Aangezien we een nieuw item in de classmap hebben toegevoegd, moet je doorgaan en de Composer-autoloader bijwerken door de volgende opdracht uit te voeren.

$ composer dump -o

Nu kunt u de EventDispatchers naamruimte om klassen autoload onder de src directory.

Dus dat is het installatiedeel, maar hoe moet je het gebruiken? In feite is het gewoon een kwestie van het opnemen van de autoload.php bestand gemaakt door Composer in uw toepassing, zoals getoond in het volgende fragment.

Hoe evenementen te maken, te verzenden en te beluisteren

In deze sectie gaan we door een voorbeeld dat laat zien hoe u een aangepaste gebeurtenis kunt maken en een luisteraar voor die gebeurtenis kunt instellen.

De evenementklasse

Om te beginnen, ga je gang en maak je de src / Events / DemoEvent.php bestand met de volgende inhoud.

foo = 'balk';  openbare functie getFoo () return $ this-> foo; 

Onze gewoonte DemoEvent klasse breidt de kern uit Evenement klasse van de component EventDispatcher. De NAAM constante bevat de naam van ons aangepaste evenement-demo.event. Het wordt gebruikt wanneer u een luisteraar voor dit evenement wilt instellen.

De luisterstijl

Laten we vervolgens de listenerklasse maken src / Luisteraars / DemoListener.php met de volgende inhoud.

getFoo () "\ n". 

De DemoListener klasse implementeert de onDemoEvent methode die wordt geactiveerd wanneer het systeem de DemoEvent evenement. Natuurlijk gebeurt dit nog niet automatisch, omdat we het moeten registreren DemoListener luisteraar om te luisteren naar de demo.event gebeurtenis met behulp van de klasse EventDispatcher.

Tot nu toe hebben we event- en listenerklassen gemaakt. Vervolgens zullen we zien hoe we al deze stukken samen kunnen binden.

Een voorbeeldbestand

Laten we het maken basic_example.php bestand met de volgende inhoud.

addListener ('demo.event', array ($ listener, 'onDemoEvent')); // verzending $ dispatcher-> verzending (DemoEvent :: NAME, nieuwe DemoEvent ());

De EventDispatcher class is het belangrijkste element in de EventDispatcher-component. Hiermee kun je luisteraars binden aan evenementen waarnaar ze willen luisteren. We hebben de addListener methode van de EventDispatcher klas om naar te luisteren demo.event evenement.

Het eerste argument van de addListener methode is een gebeurtenisnaam en het tweede argument is de PHP-opvraagbare oproep die wordt geactiveerd wanneer de geregistreerde gebeurtenis wordt verzonden. In ons geval hebben we de DemoListener object als luisteraar samen met de onDemoEvent methode.

$ dispatcher-> addListener ('demo.event', array ($ listener, 'onDemoEvent'));

Ten slotte hebben we de verzending methode van de EventDispatcher klasse om de demo.event evenement.

$ dispatcher-> dispatch (DemoEvent :: NAME, nieuwe DemoEvent ());

Wanneer u de basic_example.php bestand, zou het de volgende uitvoer moeten produceren.

$ php basic_example.php DemoListener heet! De waarde van de foo is: bar

Zoals verwacht, de onDemoEvent methode van de DemoListener class is called, en dat roept op zijn beurt de getFoo methode van de DemoEvent klasse om de gebeurtenisgerelateerde informatie op te halen.

Wat is een evenement-abonnee?

In de vorige sectie hebben we een voorbeeld gebouwd dat aantoonde hoe een aangepaste gebeurtenis en een aangepaste luisteraar te maken. We hebben ook besproken hoe een luisteraar aan de specifieke gebeurtenis kan worden gekoppeld met behulp van de EventDispatcher klasse.

Dat was een eenvoudig voorbeeld, we wilden alleen een luisteraar instellen voor een enkele gebeurtenis. Aan de andere kant, als u luisteraars wilt instellen voor meerdere evenementen of logica voor gebeurtenisafhandeling logisch wilt groeperen in één klasse, zou u moeten overwegen om evenementabonnees te gebruiken omdat ze u in staat stellen om alles op één plek te houden.

In deze sectie zullen we het voorbeeld dat in de vorige sectie werd gemaakt, herzien.

De abonneeklasse

Het eerste dat we moeten doen, is een abonneeklasse maken die de. Implementeert EventSubscriberInterface interface. Ga je gang en maak de src / Subsribers / DemoSubscriber.php klasse zoals getoond in het volgende fragment.

 'onDemoEvent',);  openbare functie onDemoEvent (DemoEvent $ -gebeurtenis) // haal gebeurtenisinformatie hier op echo "DemoListener is genaamd! \ n"; echo "De waarde van de foo is:". $ event-> getFoo (). "\ n"; 

Sinds de les DemoSubscriber implementeert de EventSubscriberInterface interface, moet het de getSubscribedEvents methode. De getSubscribedEvents methode moet een reeks gebeurtenissen retourneren waarop u zich wilt abonneren. U moet de naam van de gebeurtenis opgeven in een matrixsleutel en de naam van de methode in een arraywaarde die wordt aangeroepen wanneer de gebeurtenis wordt geactiveerd.

Het laatste is om de listenermethode in dezelfde klasse te implementeren. In ons geval moeten we de onDemoEvent methode, en dat hebben we al gedaan.

Een voorbeeldbestand

Het is tijd om onze abonnee te testen! Laten we snel de subscriber_example.php bestand met de volgende inhoud.

addSubscriber ($ abonnee); // verzending $ dispatcher-> verzending (DemoEvent :: NAME, nieuwe DemoEvent ());

U moet de gebruiken addSubscriber methode van de EventDispatcher klasse om je eigen abonnee te abonneren, en de EventDispatcher klas behandelt de rest. Het haalt gebeurtenissen op waarop moet worden geabonneerd getSubscribedEvents methode en stelt luisteraars in voor die evenementen. Afgezien daarvan is alles hetzelfde en zou het moeten werken zoals verwacht zonder verrassingen.

Laten we het testen!

$ php subscriber_example.php DemoListener is genaamd! De waarde van de foo is: bar

En dat was een evenementabonnee tot uw beschikking! Dat brengt ons ook aan het einde van dit artikel.

Conclusie

Vandaag hebben we de Symfony-gebeurtenis dispatchercomponent onderzocht, waarmee je evenementen en luisteraars in je PHP-applicaties kunt instellen. Door deze bibliotheek te gebruiken, kunt u een losjes gekoppeld systeem maken waarmee componenten van uw toepassing moeiteloos met elkaar kunnen communiceren.

Voel je vrij om je gedachten en vragen te delen via het onderstaande formulier!