Jak utworzyć własne Zdarzenie w symfony2

Chcę tworzyć niestandardowe zdarzenia o nazwie user_logged, aby móc dołączyć moich słuchaczy do tych zdarzeń.

Chcę wykonać kilka funkcji za każdym razem, gdy użytkownik się zaloguje.

Author: Vladimir Kovpak, 2012-07-26

2 answers

Tworzy klasę, która rozszerza Symfony\Component\EventDispatcher\Event.

Następnie użyj usługi dyspozytora zdarzeń, aby wysłać Zdarzenie:

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

Możesz zarejestrować usługę słuchacza zdarzeń w następujący sposób:

tags:
    - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
 74
Author: Lusitanian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-04 17:13:18

Ta odpowiedź jest trochę Rozszerzona ODPOWIEDŹ.

Usługi.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;
    }
}

Gdziekolwiek chcesz, na przykład w kontrolerze strony głównej

    use AppBundle\Event\HomePageEvent;
    // ...
    $eventDispatcher = $this->get('event_dispatcher');
    $event = new HomePageEvent();
    $event->setCode(200);
    $eventDispatcher->dispatch('custom.event.home_page_event', $event);
 26
Author: Vladimir Kovpak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:51