Example #1
0
 /**
  * Mount router under prefix query
  *
  * @param $prefix
  * @param RouterInterface $router
  * @param array $meta
  * @return $this
  */
 public function mount($prefix, RouterInterface $router, array $meta = [])
 {
     $prefix = '/' . trim($prefix, '/');
     foreach ($router->routes() as $route) {
         $route->uri = $prefix . $route->uri;
         $route->meta = array_merge($route->meta, $meta);
         $query = static::clean($route->method . ' ' . $route->uri);
         $this->routes[$query] = $route;
     }
     return $this;
 }
Example #2
0
 /**
  * Handle context
  *
  * @param Context $context
  * @param callable $chain
  * @return Response
  *
  * @throws NotFoundException
  */
 public function handle(Context $context, callable $chain = null)
 {
     // ask specific resource
     if ($context->forward) {
         list($callable, $params) = $context->forward;
         $context->invokable = $this->resolve($callable, $params);
         $context->forward = null;
     } elseif (!$context->invokable) {
         $query = $context->request->method . ' ' . $context->request->uri->path;
         $route = $this->router->find($query);
         if (!$route) {
             throw new NotFoundException('No route corresponding to query ' . $query);
         }
         $context->route = $route;
         $context->invokable = $this->resolve($route->resource, $route->params);
     }
     return $chain($context);
 }
Example #3
0
 /**
  * Find route from context
  *
  * @param Context $context
  * @return Context
  *
  * @throws NotFoundException
  */
 protected function route(Context $context)
 {
     $this->logger->debug('kernel.route: find route from http query');
     // logic already specified
     if ($context->logic) {
         $this->logger->debug('kernel.route: forward to #' . $context->logic->name . ', skip routing');
         return $context;
     }
     // find route
     $query = $context->request->method . ' ' . $context->request->uri->path;
     $route = $this->router->find($query);
     // 404
     if (!$route) {
         throw new NotFoundException('No route found for query ' . $query);
     }
     // update context
     $context->route = $route;
     $context->params = $route->params;
     $context->logic = $route->resource;
     $this->logger->debug('kernel.route: #' . $context->logic->name . ' found for query ' . $query);
     return $context;
 }