handle($request); } catch (Throwable $exception) { $code = $exception->getCode(); if ($exception instanceof ValidationException) { $message = $exception->getMessage(); } else { $message = htmlspecialchars($exception->getMessage(), ENT_QUOTES | ENT_HTML5, 'UTF-8'); } $extra = $exception instanceof JsonSerializable ? $exception->jsonSerialize() : []; $response = [ 'code' => $code, 'status' => 'error', 'message' => $message, 'error' => [ 'code' => $code, 'message' => $message, ] + $extra ]; /** @var Debugger $debugger */ $debugger = Grav::instance()['debugger']; if ($debugger->enabled()) { $response['error'] += [ 'type' => get_class($exception), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'trace' => explode("\n", $exception->getTraceAsString()), ]; } /** @var string $json */ $json = json_encode($response, JSON_THROW_ON_ERROR); return new Response($code ?: 500, ['Content-Type' => 'application/json'], $json); } } }