src/EventSubscriber/ApiExceptionSubscriber.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  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\HttpExceptionInterface;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class ApiExceptionSubscriber implements EventSubscriberInterface
  10. {
  11.     public static function getSubscribedEvents(): array
  12.     {
  13.         return [
  14.             KernelEvents::EXCEPTION => 'onKernelException'
  15.         ];
  16.     }
  17.     public function onKernelException(ExceptionEvent $event): void
  18.     {
  19.         $exception $event->getThrowable();
  20.         $request $event->getRequest();
  21.         if(&& in_array('application/json'$request->getAcceptableContentTypes())){
  22.             $apiResponse $this->createApiResponse($exception);
  23.             $event->setResponse($apiResponse);
  24.         }
  25.     }
  26.     private function createApiResponse($exception)
  27.     {
  28.         $statusCode $exception instanceof HttpExceptionInterface $exception->getStatusCode() : Response::HTTP_INTERNAL_SERVER_ERROR;
  29.         $errors = [];
  30.         return new JsonResponse(['message' => $exception->getMessage(), 'errors' => $errors], $statusCode);
  31.     }
  32. }