如何在symfony2中创建自定义事件

Ran*_*ngh 39 php events symfony observer-pattern symfony-components

我想创建调用的自定义事件,user_logged以便我可以将我的侦听器附加到这些事件.

我想在用户登录时执行一些功能.

Lus*_*ian 76

创建一个扩展的类Symfony\Component\EventDispatcher\Event.

然后,使用事件调度程序服务来调度事件:

$eventDispatcher = $container->get('event_dispatcher');
$eventDispatcher->dispatch('custom.event.identifier', $event);
Run Code Online (Sandbox Code Playgroud)

您可以注册您的事件监听器服务,如下所示:

tags:
    - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }
Run Code Online (Sandbox Code Playgroud)

  • 好答案.此外,还有更多详细信息:http://symfony.com/doc/current/components/event_dispatcher/introduction.html (6认同)
  • 确实,但这是一个简单的入门方式. (2认同)

Vla*_*pak 28

这个答案有点延伸答案.

services.yml

custom.event.home_page_event:
    class: AppBundle\EventSubscriber\HomePageEventSubscriber
    tags:
        - { name: kernel.event_listener, event: custom.event.home_page_event, method: onCustomEvent }
Run Code Online (Sandbox Code Playgroud)

的appbundle/EventSubscriber/HomePageEventSubscriber.php

namespace AppBundle\EventSubscriber;
class HomePageEventSubscriber
{
    public function onCustomEvent($event)
    {
        var_dump($event->getCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

的appbundle /事件/ 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

你想要的任何地方,例如在主页控制器中

    use AppBundle\Event\HomePageEvent;
    // ...
    $eventDispatcher = $this->get('event_dispatcher');
    $event = new HomePageEvent();
    $event->setCode(200);
    $eventDispatcher->dispatch('custom.event.home_page_event', $event);
Run Code Online (Sandbox Code Playgroud)