40

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.

2 Answers 2

78

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 }
Sign up to request clarification or add additional context in comments.

5 Comments

Good answer. In addition, there are more details here: symfony.com/doc/current/components/event_dispatcher/…
Indeed, but this is a simple enough way to get started.
excellent answer!!, now the only question is where is the best place to dispatch a custom event?, maybe a service?
Events are usually dispatched in controllers, but can be also in dispatched in services if you need.
Using the event_dispatcher service worked for me! I used $dispatcher = new EventDispatcher; but that did not fire my event for some reason.
28

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);

2 Comments

Great! very helpful!
in my case giving error Service event_dispatcher not found why this error occur can you please help me asap thanks in advance

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.