src/EventSubscriber/ExceptionSubscriber.php line 13

  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\HttpKernel\KernelEvents;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  6. use Symfony\Component\HttpKernel\Exception\HttpException;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. class ExceptionSubscriber implements EventSubscriberInterface
  9. {
  10.     public function onKernelException(ExceptionEvent $event): void
  11.     {
  12.         //après avoir récupéré l’objet exception  , nous vérifions si cet objet est une HttpException
  13.         //Si c’est le cas, nous récupérons le code et le message, puis nous changeons la réponse de 
  14.         //l’événement pour la transformer en JsonResponse
  15.         $exception $event->getThrowable();
  16.         if ($exception instanceof HttpException) {
  17.             $data = [
  18.                 'status' => $exception->getStatusCode(),
  19.                 'message' => $exception->getMessage()
  20.             ];
  21.             $event->setResponse(new JsonResponse($data));
  22.         //Au contraire, si ce n’est pas une HttpException, alors, du point de vue du client on va 
  23.         //considérer que c’est une erreur “générique”. Le code associé à ce type d’erreur est 500. 
  24.         //Donc on renseigne ce code ainsi que le message d’erreur, et on retourne à nouveau une JsonResponse    
  25.       } else {
  26.             $data = [
  27.                 'status' => 500// Le status n'existe pas car ce n'est pas une exception HTTP, donc on met 500 par défaut.
  28.                 'message' => $exception->getMessage()
  29.             ];
  30.             $event->setResponse(new JsonResponse($data));
  31.       }
  32.     }
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return [
  36.             KernelEvents::EXCEPTION => 'onKernelException',
  37.         ];
  38.     }
  39. }