Make an API response from an existing Illuminate response.
public static makeFromExisting ( Illuminate\Http\Response $old ) : |
||
$old | Illuminate\Http\Response | |
return |
/** * Handle an exception thrown during dispatching of an API request. * * @param \Exception $exception * * @throws \Exception * * @return \Dingo\Api\Http\Response */ public function handle(Exception $exception) { if ($this->handler->willHandle($exception)) { $response = $this->handler->handle($exception); return Response::makeFromExisting($response); } elseif (!$exception instanceof HttpExceptionInterface) { throw $exception; } if (!($message = $exception->getMessage())) { $message = sprintf('%d %s', $exception->getStatusCode(), Response::$statusTexts[$exception->getStatusCode()]); } $response = ['message' => $message, 'status_code' => $exception->getStatusCode()]; if ($exception instanceof ResourceException && $exception->hasErrors()) { $response['errors'] = $exception->getErrors(); } if ($code = $exception->getCode()) { $response['code'] = $code; } if ($this->debug) { $response['debug'] = ['line' => $exception->getLine(), 'file' => $exception->getFile(), 'class' => get_class($exception), 'trace' => explode("\n", $exception->getTraceAsString())]; } return new Response($response, $exception->getStatusCode(), $exception->getHeaders()); }
/** * Prepare a response by transforming and formatting it correctly. * * @param mixed $response * @param \Dingo\Api\Http\Request $request * @param string $format * @param bool $raw * * @return \Dingo\Api\Http\Response */ protected function prepareResponse($response, Request $request, $format) { if ($response instanceof IlluminateResponse) { $response = Response::makeFromExisting($response); } if ($response instanceof Response) { // If we try and get a formatter that does not exist we'll let the exception // handler deal with it. At worst we'll get a generic JSON response that // a consumer can hopefully deal with. Ideally they won't be using // an unsupported format. try { $response->getFormatter($format)->setResponse($response)->setRequest($request); } catch (NotAcceptableHttpException $exception) { return $this->exception->handle($exception); } $response = $response->morph($format); } if ($response->isSuccessful() && $this->requestIsConditional()) { if (!$response->headers->has('ETag')) { $response->setEtag(md5($response->getContent())); } $response->isNotModified($request); } return $response; }
/** * Authenticate the request for the given route. * * @param \Symfony\Component\HttpFoundation\Request $request * @param \Illuminate\Routing\Route $route * @return null|\Dingo\Api\Http\Response * @throws \Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException */ protected function authenticate(Request $request, Route $route) { try { $this->auth->authenticate($request, $route); } catch (UnauthorizedHttpException $exception) { $response = $this->router->handleException($exception); list($version, $format) = $this->router->parseAcceptHeader($request); return Response::makeFromExisting($response)->morph($format); } }
/** * {@inheritDoc} */ protected function prepareResponse($request, $response) { $response = parent::prepareResponse($request, $response); if ($this->requestTargettingApi($request)) { if ($response instanceof IlluminateResponse) { $response = ApiResponse::makeFromExisting($response); } if ($response->isSuccessful() && $this->getConditionalRequest()) { if (!$response->headers->has('ETag')) { $response->setEtag(md5($response->getContent())); } $response->isNotModified($request); } } return $response; }