Refactor exception handling by using interface

This commit is contained in:
Thomas Kuschan 2023-06-13 18:40:37 +02:00
parent 9ba7d1e6c5
commit 321a459421
2 changed files with 37 additions and 5 deletions

View File

@ -9,7 +9,7 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Throwable; use Throwable;
class Handler extends ExceptionHandler class Handler extends ExceptionHandler
@ -79,10 +79,10 @@ class Handler extends ExceptionHandler
*/ */
protected function renderApiException(Throwable $e): JsonResponse protected function renderApiException(Throwable $e): JsonResponse
{ {
$code = $e->getCode() === 0 ? 500 : $e->getCode(); $code = 500;
$headers = []; $headers = [];
if ($e instanceof HttpException) { if ($e instanceof HttpExceptionInterface) {
$code = $e->getStatusCode(); $code = $e->getStatusCode();
$headers = $e->getHeaders(); $headers = $e->getHeaders();
} }

View File

@ -4,8 +4,9 @@ namespace BookStack\Exceptions;
use Exception; use Exception;
use Illuminate\Contracts\Support\Responsable; use Illuminate\Contracts\Support\Responsable;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
class PrettyException extends Exception implements Responsable class PrettyException extends Exception implements Responsable, HttpExceptionInterface
{ {
/** /**
* @var ?string * @var ?string
@ -17,6 +18,11 @@ class PrettyException extends Exception implements Responsable
*/ */
protected $details = null; protected $details = null;
/**
* @var array
*/
protected $headers = [];
/** /**
* Render a response for when this exception occurs. * Render a response for when this exception occurs.
* *
@ -24,7 +30,7 @@ class PrettyException extends Exception implements Responsable
*/ */
public function toResponse($request) public function toResponse($request)
{ {
$code = ($this->getCode() === 0) ? 500 : $this->getCode(); $code = $this->getStatusCode();
return response()->view('errors.' . $code, [ return response()->view('errors.' . $code, [
'message' => $this->getMessage(), 'message' => $this->getMessage(),
@ -46,4 +52,30 @@ class PrettyException extends Exception implements Responsable
return $this; return $this;
} }
/**
* Get the desired HTTP status code for this exception.
*/
public function getStatusCode(): int
{
return ($this->getCode() === 0) ? 500 : $this->getCode();
}
/**
* Get the desired HTTP headers for this exception.
* @return array<mixed>
*/
public function getHeaders(): array
{
return $this->headers;
}
/**
* Set the desired HTTP headers for this exception.
* @param array<mixed> $headers
*/
public function setHeaders(array $headers): void
{
$this->headers = $headers;
}
} }