routes = $routes; } /** * Dispatch the given request to our route collection. * * @param Request $request * @param Response $response * @param callable $out * @return Response * @throws RouteNotFoundException */ public function __invoke(Request $request, Response $response, callable $out = null) { $method = $request->getMethod(); $uri = $request->getUri()->getPath(); $routeInfo = $this->getDispatcher()->dispatch($method, $uri); switch ($routeInfo[0]) { case Dispatcher::NOT_FOUND: case Dispatcher::METHOD_NOT_ALLOWED: throw new RouteNotFoundException; case Dispatcher::FOUND: $handler = $routeInfo[1]; $parameters = $routeInfo[2]; return $handler($request, $parameters); } } protected function getDispatcher() { if (! isset($this->dispatcher)) { $this->dispatcher = new Dispatcher\GroupCountBased($this->routes->getRouteData()); } return $this->dispatcher; } }