cakephp 3-使用事件触发控制器操作
我有一个触发事件的模型cakephp 3-使用事件触发控制器操作,cakephp,events,cakephp-3.0,event-listener,Cakephp,Events,Cakephp 3.0,Event Listener,我有一个触发事件的模型SlsInvoices,该事件SlsDispatches.send。 然后在我的slsinvoicescocontroller中有一个名为emit的操作 我需要在发生SlsDispatches.send事件时触发emit操作 SlsInvoices模型触发事件如下: $event = new Event('SlsDispatches.send', $this, [ 'dispatchId' => $dispatchId ] ); $this->eventMan
SlsInvoices
,该事件SlsDispatches.send
。
然后在我的slsinvoicescocontroller
中有一个名为emit
的操作
我需要在发生SlsDispatches.send
事件时触发emit
操作
SlsInvoices
模型触发事件如下:
$event = new Event('SlsDispatches.send', $this, [ 'dispatchId' => $dispatchId ] );
$this->eventManager()->dispatch( $event );
但是我无法注册一个监听器来发出动作触发器。
我试过使用:
$this->eventManager()->on( 'SlsDispatches.send', $this->processSentDispatch() );
其中,$this->processSentDispatch()
是进一步调用emit
的操作
此外,我还尝试使用以下方法在de controller内部实现侦听器接口:
public function implementedEvents()
{
return [
'SlsDispatches.send => 'processSentDispatch',
];
}
但这一行动并未触发
有可能做我想做的吗?我错过了什么
谢谢。
当做
Facundo.实例级事件管理器,即
$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']
);