コード例 #1
0
 /**
  * Trigger an event.
  *
  * @param   mixed  $event  The event object or name.
  * @return  array  The event after being passed through all listeners.
  */
 public function trigger($event, $args = array())
 {
     if (!$event instanceof Event) {
         if (isset($this->events[$event])) {
             $event = $this->events[$event];
         } else {
             $event = new Event($event);
         }
     }
     // If a listener group was specified
     // lazy load the listeners.
     if ($group = $event->getGroup()) {
         $this->addListeners($group);
     }
     // Attach any incoming aruments
     foreach ((array) $args as $name => $arg) {
         $event->addArgument($name, $arg);
     }
     // Are there any listeners for this event?
     if (isset($this->listeners[$event->getName()])) {
         foreach ($this->listeners[$event->getName()] as $listener) {
             // Call the event listener
             if ($listener instanceof Closure) {
                 $response = call_user_func($listener, $event);
             } else {
                 $response = call_user_func(array($listener, $event->getName()), $event);
             }
             // Attach response
             if (!is_null($response)) {
                 $event->addResponse($response);
             }
             // Is propagation stopped?
             if ($event->isStopped()) {
                 break;
             }
         }
     }
     return $event->getResponse();
 }