src/Listener/ExceptionToJsonListener.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use Aws\S3\Exception\S3Exception;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  7. use Symfony\Component\HttpKernel\Exception\HttpException;
  8. use Symfony\Component\Mime\Exception\InvalidArgumentException;
  9. class ExceptionToJsonListener
  10. {
  11.     public function onKernelException(ExceptionEvent $event)
  12.     {
  13.         $exception $event->getThrowable();
  14.         if ($exception instanceof HttpException) {
  15.             $response = new JsonResponse();
  16.             $response->setStatusCode($exception->getStatusCode());
  17.             $response->setData([
  18.                 'code' => $exception->getCode(),
  19.                 'status' => $exception->getStatusCode(),
  20.                 'title' => $exception->getMessage(),
  21.             ]);
  22.             $response->headers->replace($exception->getHeaders());
  23.             $event->setResponse($response);
  24.         }
  25.         if ($exception instanceof InvalidArgumentException) {
  26.             $code == $exception->getCode() ? 500 $exception->getCode();
  27.             $response = new JsonResponse([
  28.                 'code' => $code,
  29.                 'title' => $exception->getMessage(),
  30.             ], $code);
  31.             $event->setResponse($response);
  32.         }
  33.         if ($exception instanceof S3Exception) {
  34.             $code Response::HTTP_SERVICE_UNAVAILABLE;
  35.             $response = new JsonResponse([
  36.                 'code' => $code,
  37.                 'title' => $exception->getMessage(),
  38.             ], $code);
  39.             $event->setResponse($response);
  40.         }
  41.     }
  42. }