Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp 3-使用事件触发控制器操作_Cakephp_Events_Cakephp 3.0_Event Listener - Fatal编程技术网

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']
);