/** * 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(); }