触发事件后如何触发发布方法?



>我有以下事件类定义:

use SymfonyContractsEventDispatcherEvent;
class CaseEvent extends Event
{
public const NAME = 'case.event';
// ...
}

我创建了一个订阅者,如下所示:

use AppEventCaseEvent;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
class CaseEventListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [CaseEvent::NAME => 'publish'];
}
public function publish(CaseEvent $event): void
{
// do something
}
}

我还在services.yaml定义了以下内容:

AppEventSubscriberCaseEventListener:
tags:
- { name: kernel.event_listener, event: case.event}

为什么当我调度以下侦听器方法publish()这样的事件时永远不会执行?

/**
* Added here for visibility but is initialized in the class constructor
*
* @var EventDispatcherInterface
*/
private $eventDispatcher;
$this->eventDispatcher->dispatch(new CaseEvent($args));

我怀疑问题kernel.event_listener,但不确定如何正确订阅侦听器的事件。

更改您的订阅者,使getSubscribedEvents()如下所示:

public static function getSubscribedEvents(): array
{
return [CaseEvent::class => 'publish'];
}

这利用了 4.3 上的更改;您不再需要指定事件名称,并且简化了您使用的调度(单独调度事件对象,并省略事件名称(。

您也可以保持订阅者原样;并将调度呼叫更改为"旧样式":

$this->eventDispatcher->dispatch(new CaseEvent($args), CaseEvent::NAME);

此外,从services.yaml中删除event_listener标签。由于您正在实现EventSubscriberInterface,因此不需要添加任何其他配置。

相关内容

  • 没有找到相关文章

最新更新