How to create custom event in symfony2
24,638
Solution 1
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 }
Solution 2
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);
Author by
Mirage
Updated on December 02, 2020Comments
-
Mirage over 3 years
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.
-
gview almost 12 yearsGood answer. In addition, there are more details here: symfony.com/doc/current/components/event_dispatcher/…
-
Lusitanian almost 12 yearsIndeed, but this is a simple enough way to get started.
-
Nico almost 11 yearsexcellent answer!!, now the only question is where is the best place to dispatch a custom event?, maybe a service?
-
tomazahlin about 10 yearsEvents are usually dispatched in controllers, but can be also in dispatched in services if you need.
-
Mirage about 10 yearsUsing the
event_dispatcher
service worked for me! I used$dispatcher = new EventDispatcher;
but that did not fire my event for some reason. -
iamjc015 almost 8 yearsGreat! very helpful!
-
Pardeep Dhiman about 5 yearsin my case giving error Service event_dispatcher not found why this error occur can you please help me asap thanks in advance