2017-01-17 26 views
0

触发控制器动作我有模式SlsInvoices触发事件SlsDispatches.send。 后来我SlsInvoicesController里面我有一个名为emit的动作。CakePHP的3 - 与事件

我需要触发于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

而且我试着使用实现德控制器内的监听器接口:

public function implementedEvents() 
{ 
    return [ 
     'SlsDispatches.send => 'processSentDispatch', 
    ]; 
} 

但动作不会被触发。

是否有可能做我想做什么?我错过了什么?

谢谢。 此致敬礼。 Facundo。

回答

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

参见

+0

谢谢您的回答。将尝试它。 – user1077915