예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 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();
 }