2017-01-17 18 views
0

У меня есть модель SlsInvoices, которая запускает событие SlsDispatches.send. Тогда внутри мой SlsInvoicesController У меня есть действие под названием emit.cakephp 3 - действие триггерного контроллера с событием

Мне нужно активировать действие 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.

Также я попытался реализовать интерфейс слушателя внутри де контроллера с помощью:

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