cakephp 3 - 使用事件触发控制器动作
cakephp 3 - trigger controller action with event
我有触发事件 SlsDispatches.send
的模型 SlsInvoices
。
然后在我的 SlsInvoicesController
中,我有一个名为 emit
.
的动作
我需要在 SlsDispatches.send
事件上触发 emit
操作。
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',
];
}
但是没有触发动作。
有没有可能做我想做的事?我错过了什么?
谢谢。
问候。
法昆多.
实例级事件管理器,即$this->eventManager()
,不监听其他实例级事件管理器的事件。如果你想从持有事件管理器实例的对象外部监听本地调度的事件,那么你需要通过对象事件管理器订阅它:
$SlsInvoicesObject->eventManager()
或通过全局的:
\Cake\Event\EventManager::instance()
此外,您不能按照显示的方式传递回调,您在那里所做的是调用该方法,并将其 return 值传递给 on()
方法。
长话短说,您需要执行以下操作:
$SlsInvoicesObject->eventManager()->on(
'SlsDispatches.send',
[$this, 'processSentDispatch']
);
或
\Cake\Event\EventManager::instance()->on(
'SlsDispatches.send',
[$this, 'processSentDispatch']
);
另见
我有触发事件 SlsDispatches.send
的模型 SlsInvoices
。
然后在我的 SlsInvoicesController
中,我有一个名为 emit
.
我需要在 SlsDispatches.send
事件上触发 emit
操作。
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',
];
}
但是没有触发动作。
有没有可能做我想做的事?我错过了什么?
谢谢。 问候。 法昆多.
实例级事件管理器,即$this->eventManager()
,不监听其他实例级事件管理器的事件。如果你想从持有事件管理器实例的对象外部监听本地调度的事件,那么你需要通过对象事件管理器订阅它:
$SlsInvoicesObject->eventManager()
或通过全局的:
\Cake\Event\EventManager::instance()
此外,您不能按照显示的方式传递回调,您在那里所做的是调用该方法,并将其 return 值传递给 on()
方法。
长话短说,您需要执行以下操作:
$SlsInvoicesObject->eventManager()->on(
'SlsDispatches.send',
[$this, 'processSentDispatch']
);
或
\Cake\Event\EventManager::instance()->on(
'SlsDispatches.send',
[$this, 'processSentDispatch']
);
另见