Пример #1
0
 /**
  * @param ServerRequestInterface $request
  *
  * @return $this
  */
 public function route(ServerRequestInterface $request)
 {
     /** @var Route[] $routes */
     $routes = array_reverse($this->routes);
     foreach ($routes as $route) {
         $path = $request->getUri()->getPath();
         $baseUri = $this->getOption('baseUri', '');
         $len = strlen($baseUri);
         if ($len > 0) {
             if (strncmp($baseUri, $path, $len) !== 0) {
                 continue;
             }
             $path = substr($path, $len);
         }
         if (empty($path)) {
             $path = '/';
         }
         $vars = null;
         if (!in_array($request->getMethod(), $route->getMethods()) || ($vars = $route->match($path)) === false) {
             continue;
         }
         $subRequest = $request;
         foreach ($vars as $key => $value) {
             $subRequest = $subRequest->withAttribute($key, $value);
         }
         $this->app->prepend(function ($request, $response, $next) use($route, $subRequest) {
             $handler = $this->app->prepareMiddleware($route->getHandler());
             return $handler($subRequest, $response, $next);
         });
     }
     return $this;
 }