调度员不会发送我的事件symfony

时间:2016-01-21 12:02:15

标签: php symfony

我有一个ExampleListener类,如下所示:

<?php

namespace AppBundle\EventListener;

class ExampleListener
{
    public function helloWorld()
    {
        echo "Hello World!";
    }
}

这是我的services.yml

services:
    my.event:
        class: AppBundle\EventListener\ExampleListener
        tags:
            - { name: kernel.event_listener, event: my.event, method: helloWorld }

然后从控制器我试图发送事件。

$dispatcher = new EventDispatcher();
$dispatcher->dispatch('my.event')

我没有任何错误,但永远不会调用helloWorld函数。 我的活动结束了:

  

php bin / console debug:event-dispatcher my.event

结果是:

#1      AppBundle\EventListener\ExampleListener::helloWorld()   0

为什么调度员不会把事件称为正确? 感谢。

2 个答案:

答案 0 :(得分:1)

您已经创建了一个新的事件调度程序,它与Symfony用于注册您在容器配置中定义的事件侦听器不同。

不要自己创建事件调度程序,而是使用Symfony已经定义的那个。您可以从容器中获取它,例如在控制器中:

$this->container->get('event_dispatcher')->dispatch('my.event');

如果您需要从服务调度事件,只需将event_dispatcher服务作为构造函数参数之一传递:

services:
    my_service:
        class: Foo\MyService
        arguments:
            - @event_dispatcher

答案 1 :(得分:0)

通过自动接线,现在最好注入EventDispatcherInterface

<?php
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
//...

class DefaultController extends Controller
{
    public function display(Request $request, EventDispatcherInterface $dispatcher)
    {
        //Define your event
        $event = new YourEvent($request);
        $dispatcher->dispatch(YourEvent::EVENT_TO_DISPATCH, $event);
    }
}