src/EventSubscriber/JSONErrorHandler.php line 19

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace PPApi\EventSubscriber;
  3. use PPApi\Model\V1\APIError;
  4. use PPApi\Model\V1\APIException;
  5. use PPApi\Model\V1\APIExceptionResponse;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. class JSONErrorHandler implements EventSubscriberInterface
  12. {
  13.     public function onKernelException(ExceptionEvent $event)
  14.     {
  15.         if($event->getResponse() instanceof JsonResponse){
  16.             return;
  17.         }
  18.         $err $event->getThrowable();
  19.         if($err instanceof APIException){
  20.             $event->setResponse(new JsonResponse($err->getError(), $err->getStatusCode()));
  21.             return;
  22.         }
  23.         if($err instanceof HttpExceptionInterface){
  24.             $error = new APIError($err->getStatusCode(), $err->getMessage());
  25.             $response = new JsonResponse($error$err->getStatusCode());
  26.             $event->setResponse($response);
  27.             return;
  28.         }
  29.         $exception = new APIExceptionResponse(JsonResponse::HTTP_INTERNAL_SERVER_ERROR$err->getMessage(), get_class($err));
  30.         $response = new JsonResponse($exception,JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
  31.         $event->setResponse($response);
  32.     }
  33.     public static function getSubscribedEvents()
  34.     {
  35.         return [
  36.             // priority should be < 0 to let the logger catch this exception
  37.             KernelEvents::EXCEPTION => ['onKernelException', -5]
  38.         ];
  39.     }
  40. }