/** * @param IRoute $route * @param IContainer $container * * @return mixed */ public function invoke(IRoute $route, IContainer $container) { list($controller, $method) = $this->extractControllerAndMethod($route->getAction()); $this->ensureClassExists($controller); $instance = $container->get($controller); $this->ensureMethodExists($instance, $method); return $container->callMethod($instance, $method, $route->getParameters()); }
/** * @param IRoute $route * * @return null|HttpResponse */ public function buildResponseForRoute(IRoute $route) { $abstract = $route->getAction(); if ($abstract instanceof IHttpResponse) { return $abstract; } else { $response = $abstract; if ($abstract instanceof Closure) { $response = $abstract(new CurrentRequest(), $route->getParameters()); } if (!$response instanceof IHttpResponse) { $response = $this->createResponse(HttpStatusCode::OK, $response); } return $response; } }
/** * @param IRoute $route * @param IContainer $container * * @return mixed */ public function invoke(IRoute $route, IContainer $container) { return $container->call($route->getAction(), $route->getParameters()); }
/** * @param IRoute $route * @param $method * * @return bool */ public function compareRouteToMethod(IRoute $route, $method) { return array_contains($route->getMethods(), $method); }