routes = $routes; } /** * Dispatch the given request to our route collection. * * @throws MethodNotAllowedException * @throws RouteNotFoundException */ public function process(Request $request, Handler $handler): Response { $method = $request->getMethod(); $uri = $request->getUri()->getPath() ?: '/'; $routeInfo = $this->getDispatcher()->dispatch($method, $uri); switch ($routeInfo[0]) { case Dispatcher::NOT_FOUND: throw new RouteNotFoundException($uri); case Dispatcher::METHOD_NOT_ALLOWED: throw new MethodNotAllowedException($method); 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; } }