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