src/EventListener/ExceptionListener.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  7. use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
  8. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  9. #[AsEventListener(ExceptionEvent::class)]
  10. class ExceptionListener
  11. {
  12.     public function __construct(
  13.         private readonly EntityManagerInterface $em,
  14.     ) {
  15.     }
  16.     public function __invoke(ExceptionEvent $event): void
  17.     {
  18.         if ($_ENV['APP_ENV'] ?? 'dev' !== 'prod') {
  19.             return;
  20.         }
  21.         $exception $event->getThrowable();
  22.         $response = new JsonResponse();
  23.         $response->setContent(json_encode($exception->getMessage()));
  24.         if ($exception instanceof HttpExceptionInterface) {
  25.             $response->setStatusCode($exception->getStatusCode());
  26.             $response->headers->replace($exception->getHeaders());
  27.         } else {
  28.             $response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
  29.         }
  30.         // sends the modified response object to the event
  31.         $event->setResponse($response);
  32.     }
  33. }