我有一个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
为什么调度员不会把事件称为正确? 感谢。
答案 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);
}
}