/** * Call all listeners registered to provided event with data. * * Returns true if a registered event's callback was called. * * @param \Zumba\Symbiosis\Event\Event $event Event object * @param array $data Data to append/override in the event object * @return boolean */ public function trigger(Event $event, $data = array()) { $eventName = $event->name(); $event->data(array_merge($event->data(), $data)); if (!isset($this->registry[$eventName])) { Log::write('No event registered.', Log::LEVEL_DEBUG, compact('eventName')); return false; } Log::write('Event triggered.', Log::LEVEL_DEBUG, compact('eventName')); foreach ($this->registry[$eventName] as $listeners) { foreach ($listeners as $listener) { if ($listener($event) === false) { $event->stopPropagation(); } if (!$event->isPropagating()) { Log::write('Propagation stopped.', Log::LEVEL_DEBUG, compact('listener', 'eventName')); break; } } } return true; }
public function testEventName() { $testObject = $this->getMock('stdClass', array('testCallback1')); $testObject->expects($this->once())->method('testCallback1'); EventManager::register('test.event1', array($testObject, 'testCallback1')); $event = new Event('test.event1'); $event->trigger(); $event->name('test.event2'); $event->trigger(); }