]> BookStack Code Mirror - bookstack/blobdiff - app/Exceptions/PrettyException.php
API: Added test to cover system info endpoint
[bookstack] / app / Exceptions / PrettyException.php
index 889252006f4cdb349f88103793035d4fc551f28d..606085231f77411e467b2395437373d7e5bf04d6 100644 (file)
@@ -1,3 +1,59 @@
-<?php namespace BookStack\Exceptions;
+<?php
 
-class PrettyException extends \Exception {}
\ No newline at end of file
+namespace BookStack\Exceptions;
+
+use Exception;
+use Illuminate\Contracts\Support\Responsable;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+
+class PrettyException extends Exception implements Responsable, HttpExceptionInterface
+{
+    protected ?string $subtitle = null;
+    protected ?string $details = null;
+
+    /**
+     * Render a response for when this exception occurs.
+     *
+     * {@inheritdoc}
+     */
+    public function toResponse($request)
+    {
+        $code = $this->getStatusCode();
+
+        return response()->view('errors.' . $code, [
+            'message'  => $this->getMessage(),
+            'subtitle' => $this->subtitle,
+            'details'  => $this->details,
+        ], $code);
+    }
+
+    public function setSubtitle(string $subtitle): self
+    {
+        $this->subtitle = $subtitle;
+
+        return $this;
+    }
+
+    public function setDetails(string $details): self
+    {
+        $this->details = $details;
+
+        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.
+     */
+    public function getHeaders(): array
+    {
+        return [];
+    }
+}