/** * 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); }
/** * 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; }