我有一个 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);
}
}