AmeliaErrorHandler.php
45 lines
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * @copyright © Melograno Ventures. All rights reserved. |
| 5 | * @licence See COPYING.md for license details. |
| 6 | */ |
| 7 | |
| 8 | namespace AmeliaBooking\Infrastructure\Common; |
| 9 | |
| 10 | use AmeliaBooking\Application\Common\Exceptions\AccessDeniedException; |
| 11 | use AmeliaBooking\Application\Controller\Controller; |
| 12 | use AmeliaVendor\Psr\Http\Message\ResponseInterface; |
| 13 | use Slim\Exception\HttpException; |
| 14 | use Slim\Handlers\ErrorHandler; |
| 15 | |
| 16 | class AmeliaErrorHandler extends ErrorHandler |
| 17 | { |
| 18 | protected function respond(): ResponseInterface |
| 19 | { |
| 20 | $exception = $this->exception; |
| 21 | $request = $this->request; |
| 22 | |
| 23 | if ($exception instanceof AccessDeniedException) { |
| 24 | $status = Controller::STATUS_FORBIDDEN; |
| 25 | } elseif ($exception instanceof HttpException) { |
| 26 | $status = $exception->getCode(); |
| 27 | } else { |
| 28 | $status = Controller::STATUS_INTERNAL_SERVER_ERROR; |
| 29 | } |
| 30 | |
| 31 | $responseMessage = ['message' => $exception->getMessage()]; |
| 32 | |
| 33 | $queryParams = $request->getQueryParams(); |
| 34 | if (!empty($queryParams['showAmeliaSqlExceptions'])) { |
| 35 | $prev = $exception->getPrevious(); |
| 36 | $responseMessage['exception'] = $prev ? $prev->getMessage() : ''; |
| 37 | } |
| 38 | |
| 39 | $response = $this->responseFactory->createResponse($status); |
| 40 | $response->getBody()->write(json_encode($responseMessage)); |
| 41 | |
| 42 | return $response->withHeader('Content-Type', 'application/json'); |
| 43 | } |
| 44 | } |
| 45 |