web-dev-qa-db-fra.com

Comment créer un événement personnalisé dans symfony2

Je souhaite créer des événements personnalisés appelés user_logged pour que je puisse attacher mes auditeurs à ces événements.

Je veux exécuter quelques fonctions chaque fois que l'utilisateur s'est connecté.

39
user825904

Créez une classe qui étend Symfony\Component\EventDispatcher\Event.

Ensuite, utilisez le service de répartiteur d'événements pour distribuer l'événement:

$eventDispatcher = $container->get('event_dispatcher');
$eventDispatcher->dispatch('custom.event.identifier', $event);

Vous pouvez enregistrer votre service d'écoute d'événements comme suit:

tags:
    - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
76
Lusitanian

Cette réponse est un peu étendue réponse .

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

où vous le souhaitez, par exemple dans le contrôleur de la page d'accueil

    use AppBundle\Event\HomePageEvent;
    // ...
    $eventDispatcher = $this->get('event_dispatcher');
    $event = new HomePageEvent();
    $event->setCode(200);
    $eventDispatcher->dispatch('custom.event.home_page_event', $event);
28
Vladimir Kovpak