我有触发事件SlsInvoices
的模型SlsDispatches.send
。
然后在我的SlsInvoicesController
内,我有一个名为emit
的动作。
我需要在emit
事件上触发SlsDispatches.send
操作。
SlsInvoices
模型将事件触发为:
$event = new Event('SlsDispatches.send', $this, [ 'dispatchId' => $dispatchId ] );
$this->eventManager()->dispatch( $event );
但是我无法注册一个监听器来制作emit
动作触发器。
我尝试过使用:
$this->eventManager()->on( 'SlsDispatches.send', $this->processSentDispatch() );
其中$this->processSentDispatch()
是进一步调用emit
的操作。
此外,我尝试使用以下方法在de controller中实现侦听器接口:
public function implementedEvents()
{
return [
'SlsDispatches.send => 'processSentDispatch',
];
}
但是没有触发行动。
有可能做我想要的吗?我错过了什么?
感谢。 问候。 法昆
答案 0 :(得分:1)
实例级事件管理器(即$this->eventManager()
)不会侦听其他实例级事件管理器的事件。如果要从保存事件管理器实例的对象外部侦听本地调度的事件,则需要通过对象事件管理器订阅它:
$SlsInvoicesObject->eventManager()
或通过全球的:
\Cake\Event\EventManager::instance()
此外,您无法以显示它的方式传递回调,您正在执行的操作是调用方法,并将其返回值传递给on()
方法。
长话短说,你需要做一些事情:
$SlsInvoicesObject->eventManager()->on(
'SlsDispatches.send',
[$this, 'processSentDispatch']
);
或
\Cake\Event\EventManager::instance()->on(
'SlsDispatches.send',
[$this, 'processSentDispatch']
);
另见