<?php
namespace App\EventListener;
use App\Service\Helper\LogReportService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
/**
* Este evento se envía tan pronto como ocurre un error durante el manejo de la solicitud HTTP.
*/
class ExceptionListener
{
private LogReportService $logReportService;
public function __construct(
LogReportService $logReportService
)
{
$this->logReportService = $logReportService;
}
public function onKernelException(ExceptionEvent $event)
{
// Obtienes el objeto de excepción del evento recibido
$exception = $event->getThrowable();
// Personalize su objeto de respuesta para mostrar los detalles de la excepción
$response = new JsonResponse(['status' => false, 'errors' => [$exception->getMessage(), $exception->getTraceAsString()]]);
// HttpExceptionInterface es un tipo especial de excepción que contiene el código de estado y los detalles del encabezado
if ($exception instanceof HttpExceptionInterface) {
$response->setStatusCode($exception->getStatusCode());
$response->headers->replace($exception->getHeaders());
} else {
$response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
}
$response->headers->set('Content-Type', 'application/json');
// envía el objeto de respuesta modificado al evento
$event->setResponse($response);
}
}