/** * Trigger an event. * * @param EventInterface|string $event The event object or name. * @param array $args The arguments to set in event. * * @return EventInterface The event after being passed through all listeners. * * @since 2.0 */ public function triggerEvent($event, $args = array()) { if (!$event instanceof EventInterface) { if (isset($this->events[$event])) { $event = $this->events[$event]; } else { $event = new Event($event); } } $arguments = array_merge($event->getArguments(), $args); $event->setArguments($arguments); if (isset($this->listeners[$event->getName()])) { foreach ($this->listeners[$event->getName()] as $listener) { if ($event->isStopped()) { return $event; } if (is_callable($listener)) { call_user_func($listener, $event); } else { call_user_func(array($listener, $event->getName()), $event); } } } return $event; }