<?php
namespace App\EventListener;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
class ApiSecureExceptionListener
{
public function onKernelException(ExceptionEvent $event)
{
$exception = $event->getThrowable();
// Проверяем, что исключение произошло в нужном пространстве имен
if (strpos($exception->getTrace()[0]['class'] ?? '', 'App\Controller\API\Secure') === 0) {
$errors = json_decode($exception->getMessage(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
$errors = [$exception->getMessage()];
}
$response = new JsonResponse([
'errors' => $errors,
]);
// Устанавливаем статус ответа в зависимости от типа исключения
if ($exception instanceof HttpExceptionInterface) {
$headers = array_merge(
$exception->getHeaders(),
['Content-Type' => 'application/json']
);
$response->setStatusCode($exception->getStatusCode());
$response->headers->replace($headers);
} else {
$response->setStatusCode(JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
$event->setResponse($response);
}
}
}