routes = $routes; } /** * Resolve the given request from 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: $request = $request ->withAttribute('routeName', $routeInfo[1]['name']) ->withAttribute('routeHandler', $routeInfo[1]['handler']) ->withAttribute('routeParameters', $routeInfo[2]); return $handler->handle($request); } } protected function getDispatcher() { if (! isset($this->dispatcher)) { $this->dispatcher = new Dispatcher\GroupCountBased($this->routes->getRouteData()); } return $this->dispatcher; } }