调度程序不调度我的事件 Symfony


dispatcher doesn't dispatch my event symfony

我有一个 ExampleListener 类,看起来像:

<?php
namespace AppBundle'EventListener;
class ExampleListener
{
    public function helloWorld()
    {
        echo "Hello World!";
    }
}

这是我的服务。

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

为什么调度员没有正确调用事件?谢谢。

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

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

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

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

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

使用自动接线,现在最好注入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);
    }
}