I want to create custom events called user_logged
so that i can attach my listeners to those events.
I want to execute few functions whenever user has logged in.
Event Dispatchers are an Actor communication method where one Actor dispatches an event and other Actors that are listening to that event are notified.
Custom events allow us to run the function outside of the script. It is possible to attach events in other file or script and run them. It is possible to attach multiple listeners to the same event. Separation of code from a script is possible as we don't have to include event code in functions.
A custom event can be created using the CustomEvent constructor: const myEvent = new CustomEvent("myevent", { detail: {}, bubbles: true, cancelable: true, composed: false, }); As shown above, creating a custom event via the CustomEvent constructor is similar to creating one using the Event constructor.
The EventDispatcher component provides tools that allow your application components to communicate with each other by dispatching events and listening to them.
Create a class which extends Symfony\Component\EventDispatcher\Event
.
Then, use the event dispatcher service to dispatch the event:
$eventDispatcher = $container->get('event_dispatcher'); $eventDispatcher->dispatch('custom.event.identifier', $event);
You can register your event listener service like so:
tags: - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
This answer is little bit extend answer.
services.yml
custom.event.home_page_event: class: AppBundle\EventSubscriber\HomePageEventSubscriber tags: - { name: kernel.event_listener, event: custom.event.home_page_event, method: onCustomEvent }
AppBundle/EventSubscriber/HomePageEventSubscriber.php
namespace AppBundle\EventSubscriber; class HomePageEventSubscriber { public function onCustomEvent($event) { var_dump($event->getCode()); } }
AppBundle/Event/HomePageEvent.php
namespace AppBundle\Event; use Symfony\Component\EventDispatcher\Event; class HomePageEvent extends Event { private $code; public function setCode($code) { $this->code = $code; } public function getCode() { return $this->code; } }
anywhere you wish, for example in home page controller
use AppBundle\Event\HomePageEvent; // ... $eventDispatcher = $this->get('event_dispatcher'); $event = new HomePageEvent(); $event->setCode(200); $eventDispatcher->dispatch('custom.event.home_page_event', $event);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With