vendor/agediss/core/src/EventSubscriber/ApiExceptionSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace Agediss\Core\EventSubscriber;
  3. use Agediss\Core\Exception\Api\ApiException;
  4. use Agediss\Core\Exception\LogoutException;
  5. use Agediss\Core\Utils\ApiCodeEnum;
  6. use Agediss\Core\Utils\ApiResponseMessage;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  12. use Symfony\Component\HttpKernel\Exception\HttpException;
  13. /**
  14.  * Class ApiExceptionSubscriber.
  15.  */
  16. class ApiExceptionSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var LoggerInterface
  20.      */
  21.     private $logger;
  22.     /**
  23.      * ApiExceptionSubscriber constructor.
  24.      */
  25.     public function __construct(LoggerInterface $logger)
  26.     {
  27.         $this->logger $logger;
  28.     }
  29.     /**
  30.      * Cette methode est appelé dès lors qu'une exception n'est pas catché.
  31.      * Ici on ne traite que les exception de type 'ApiException' pour quelle renvoi du json.
  32.      */
  33.     public function onKernelException(ExceptionEvent $event)
  34.     {
  35.         $e $event->getThrowable();
  36.         if (!($e instanceof HttpException) && !($e instanceof ApiException)) {
  37.             if ('dev' === getenv('APP_ENV')) {
  38.                 return;
  39.             }
  40.             $e = new ApiException(
  41.                 new ApiResponseMessage($e->getMessage(), ApiCodeEnum::API_INTERNAL_ERROR),
  42.                 500
  43.             );
  44.             $this->logger->error("une erreur c'est produite dans l'application MESSAGE : {$e->getMessage()}", ['exception' => $e->getApiResponseMessage()->getData()]);
  45.             $response = new JsonResponse(
  46.                 $e->getApiResponseMessage()->getData(),
  47.                 $e->getCode()
  48.             );
  49.         }
  50.         if ($e instanceof LogoutException) {
  51.             $response = new RedirectResponse($_ENV['HOST_API_SSO'].'?connexionFailed='.$e->getApiResponseMessage()->getMessage());
  52.         } else if ($e instanceof ApiException) {
  53.             $this->logger->error("une erreur c'est produite dans une requete api MESSAGE : {$e->getMessage()}", ['exception' => $e->getApiResponseMessage()->getData()]);
  54.             $response = new JsonResponse(
  55.                 $e->getApiResponseMessage()->getData(),
  56.                 $e->getCode()
  57.             );
  58.         }
  59.         if ($e instanceof HttpException) {
  60.             $apiExceptionMsg = new ApiResponseMessage($e->getMessage(), ApiCodeEnum::INVALID_ADDRESS);
  61.             $this->logger->error("une erreur c'est produite dans une requete api MESSAGE : {$e->getMessage()}");
  62.             $response = new JsonResponse(
  63.                 $apiExceptionMsg->getData(),
  64.                 $e->getStatusCode()
  65.             );
  66.         }
  67.         $response->headers->set('Content-Type''application/json');
  68.         $event->setResponse($response);
  69.     }
  70.     /**
  71.      * @return array
  72.      */
  73.     public static function getSubscribedEvents()
  74.     {
  75.         return [
  76.             'kernel.exception' => 'onKernelException',
  77.         ];
  78.     }
  79. }