listeners[] = $events->attach(MvcEvent::EVENT_ROUTE, array($this, 'onRoute')); } /** * Detach all our listeners from the event manager * * @param EventManagerInterface $events * @return void */ public function detach(EventManagerInterface $events) { foreach ($this->listeners as $index => $listener) { if ($events->detach($listener)) { unset($this->listeners[$index]); } } } /** * Listen to the "route" event and attempt to route the request * * If no matches are returned, triggers "dispatch.error" in order to * create a 404 response. * * Seeds the event with the route match on completion. * * @param MvcEvent $e * @return null|Router\RouteMatch */ public function onRoute($e) { $target = $e->getTarget(); $request = $e->getRequest(); $router = $e->getRouter(); $routeMatch = $router->match($request); if (!$routeMatch instanceof Router\RouteMatch) { $e->setError(Application::ERROR_ROUTER_NO_MATCH); $results = $target->getEventManager()->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $e); if (count($results)) { $return = $results->last(); } else { $return = $e->getParams(); } return $return; } $e->setRouteMatch($routeMatch); return $routeMatch; } }