/** * {@inheritdoc} */ public function trigger($event, $args = array()) { if (!$event instanceof Event) { $event = new Event($event); } // If a listener group was specified // lazy load the listeners. if ($group = $event->getGroup()) { $this->dispatcher->addListeners($group); } $this->preProcess($event); $this->preTrigger($event); /*$e = $this->stopwatch->start($event->getName(), 'section'); $responses = $this->dispatcher->trigger($event, $args); if ($e->isStarted()) { $e->stop(); }*/ // Attach any incoming aruments foreach ((array) $args as $name => $arg) { $event->addArgument($name, $arg); } foreach ($this->dispatcher->getListeners($event->getName()) as $listener) { // Call the event listener $response = $listener->trigger($event); // Attach response if (!is_null($response)) { $event->addResponse($response); } // Is propagation stopped? if ($event->isStopped()) { break; } } $this->postTrigger($event); $this->postProcess($event); return $event->getResponse(); }
/** * 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(); }