2021-06-26 23:23:15 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace BookStack\Exceptions;
|
2016-02-04 04:52:25 +08:00
|
|
|
|
2021-05-09 01:49:58 +08:00
|
|
|
use Exception;
|
|
|
|
use Illuminate\Contracts\Support\Responsable;
|
2023-06-14 00:40:37 +08:00
|
|
|
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
|
2021-05-09 01:49:58 +08:00
|
|
|
|
2023-06-14 00:40:37 +08:00
|
|
|
class PrettyException extends Exception implements Responsable, HttpExceptionInterface
|
2018-01-29 00:58:52 +08:00
|
|
|
{
|
2021-05-09 01:49:58 +08:00
|
|
|
/**
|
|
|
|
* @var ?string
|
|
|
|
*/
|
|
|
|
protected $subtitle = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var ?string
|
|
|
|
*/
|
|
|
|
protected $details = null;
|
|
|
|
|
2023-06-14 00:40:37 +08:00
|
|
|
/**
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
protected $headers = [];
|
|
|
|
|
2021-05-09 01:49:58 +08:00
|
|
|
/**
|
|
|
|
* Render a response for when this exception occurs.
|
2021-06-26 23:23:15 +08:00
|
|
|
*
|
2021-10-27 05:04:18 +08:00
|
|
|
* {@inheritdoc}
|
2021-05-09 01:49:58 +08:00
|
|
|
*/
|
|
|
|
public function toResponse($request)
|
|
|
|
{
|
2023-06-14 00:40:37 +08:00
|
|
|
$code = $this->getStatusCode();
|
2021-06-26 23:23:15 +08:00
|
|
|
|
2021-05-09 01:49:58 +08:00
|
|
|
return response()->view('errors.' . $code, [
|
2021-06-26 23:23:15 +08:00
|
|
|
'message' => $this->getMessage(),
|
2021-05-09 01:49:58 +08:00
|
|
|
'subtitle' => $this->subtitle,
|
2021-06-26 23:23:15 +08:00
|
|
|
'details' => $this->details,
|
2021-05-09 01:49:58 +08:00
|
|
|
], $code);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setSubtitle(string $subtitle): self
|
|
|
|
{
|
|
|
|
$this->subtitle = $subtitle;
|
2021-06-26 23:23:15 +08:00
|
|
|
|
2021-05-09 01:49:58 +08:00
|
|
|
return $this;
|
|
|
|
}
|
2018-01-29 00:58:52 +08:00
|
|
|
|
2021-05-09 01:49:58 +08:00
|
|
|
public function setDetails(string $details): self
|
|
|
|
{
|
|
|
|
$this->details = $details;
|
2021-06-26 23:23:15 +08:00
|
|
|
|
2021-05-09 01:49:58 +08:00
|
|
|
return $this;
|
|
|
|
}
|
2023-06-14 00:40:37 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|
2018-01-29 00:58:52 +08:00
|
|
|
}
|