]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | ||
3 | namespace Shaarli\Api\Exceptions; | |
4 | ||
5 | use Slim\Http\Response; | |
6 | ||
7 | /** | |
8 | * Abstract class ApiException | |
9 | * | |
10 | * Parent Exception related to the API, able to generate a valid Response (ResponseInterface). | |
11 | * Also can include various information in debug mode. | |
12 | */ | |
13 | abstract class ApiException extends \Exception { | |
14 | ||
15 | /** | |
16 | * @var Response instance from Slim. | |
17 | */ | |
18 | protected $response; | |
19 | ||
20 | /** | |
21 | * @var bool Debug mode enabled/disabled. | |
22 | */ | |
23 | protected $debug; | |
24 | ||
25 | /** | |
26 | * Build the final response. | |
27 | * | |
28 | * @return Response Final response to give. | |
29 | */ | |
30 | public abstract function getApiResponse(); | |
31 | ||
32 | /** | |
33 | * Creates ApiResponse body. | |
34 | * In production mode, it will only return the exception message, | |
35 | * but in dev mode, it includes additional information in an array. | |
36 | * | |
37 | * @return array|string response body | |
38 | */ | |
39 | protected function getApiResponseBody() { | |
40 | if ($this->debug !== true) { | |
41 | return $this->getMessage(); | |
42 | } | |
43 | return [ | |
44 | 'message' => $this->getMessage(), | |
45 | 'stacktrace' => get_class($this) .': '. $this->getTraceAsString() | |
46 | ]; | |
47 | } | |
48 | ||
49 | /** | |
50 | * Build the Response object to return. | |
51 | * | |
52 | * @param int $code HTTP status. | |
53 | * | |
54 | * @return Response with status + body. | |
55 | */ | |
56 | protected function buildApiResponse($code) | |
57 | { | |
58 | $style = $this->debug ? JSON_PRETTY_PRINT : null; | |
59 | return $this->response->withJson($this->getApiResponseBody(), $code, $style); | |
60 | } | |
61 | ||
62 | /** | |
63 | * @param Response $response | |
64 | */ | |
65 | public function setResponse($response) | |
66 | { | |
67 | $this->response = $response; | |
68 | } | |
69 | ||
70 | /** | |
71 | * @param bool $debug | |
72 | */ | |
73 | public function setDebug($debug) | |
74 | { | |
75 | $this->debug = $debug; | |
76 | } | |
77 | } |