src/EventSubscriber/ExceptionSubscriber.php line 24

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Dto\Api\V1\Response\ResponseDto;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  7. use Symfony\Component\Serializer\SerializerInterface;
  8. class ExceptionSubscriber implements EventSubscriberInterface
  9. {
  10.     public function __construct(private SerializerInterface $serializer)
  11.     {
  12.     }
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [
  16.             ExceptionEvent::class => 'onKernelException',
  17.         ];
  18.     }
  19.     public function onKernelException(ExceptionEvent $event): void
  20.     {
  21.         // You get the exception object from the received event
  22.         $exception $event->getThrowable();
  23.         if ($exception instanceof \ErrorException) {
  24.             // Customize your response object to display the exception details
  25.             $response = new JsonResponse();
  26.             $response->setStatusCode(JsonResponse::HTTP_BAD_REQUEST);
  27.             if (!empty($exception->getCode())) {
  28.                 $response->setStatusCode($exception->getCode());
  29.             }
  30.             $responseDto = new ResponseDto();
  31.             $responseDto->setMessages([$exception->getMessage()]);
  32.             $responseDto->getServer()->setHttpCode($response->getStatusCode());
  33.             if ('dev' == $_ENV['APP_ENV']) {
  34.                 $json $this->serializer->serialize($responseDto'json'array_merge([
  35.                     'groups' => ['BASE''DEBUG'],
  36.                 ]));
  37.             } else {
  38.                 $json $this->serializer->serialize($responseDto'json'array_merge([
  39.                     'groups' => 'BASE',
  40.                 ]));
  41.             }
  42.             $response->setContent($json);
  43.             // sends the modified response object to the event
  44.             $event->setResponse($response);
  45.         }
  46.     }
  47. }