src/EventListener/ApiSecureExceptionListener.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpFoundation\JsonResponse;
  4. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  5. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  6. class ApiSecureExceptionListener
  7. {
  8.     public function onKernelException(ExceptionEvent $event)
  9.     {
  10.         $exception $event->getThrowable();
  11.         // Проверяем, что исключение произошло в нужном пространстве имен
  12.         if (strpos($exception->getTrace()[0]['class'] ?? '''App\Controller\API\Secure') === 0) {
  13.             $errors json_decode($exception->getMessage(), true);
  14.             if (json_last_error() !== JSON_ERROR_NONE) {
  15.                 $errors = [$exception->getMessage()];
  16.             }
  17.             $response = new JsonResponse([
  18.                 'errors' => $errors,
  19.             ]);
  20.             // Устанавливаем статус ответа в зависимости от типа исключения
  21.             if ($exception instanceof HttpExceptionInterface) {
  22.                 $headers array_merge(
  23.                     $exception->getHeaders(),
  24.                     ['Content-Type' => 'application/json']
  25.                 );
  26.                 $response->setStatusCode($exception->getStatusCode());
  27.                 $response->headers->replace($headers);
  28.             } else {
  29.                 $response->setStatusCode(JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
  30.             }
  31.             
  32.             $event->setResponse($response);
  33.         }
  34.     }
  35. }