<?php
namespace App\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
#[AsEventListener(ExceptionEvent::class)]
class ExceptionListener
{
public function __construct(
private readonly EntityManagerInterface $em,
) {
}
public function __invoke(ExceptionEvent $event): void
{
if ($_ENV['APP_ENV'] ?? 'dev' !== 'prod') {
return;
}
$exception = $event->getThrowable();
$response = new JsonResponse();
$response->setContent(json_encode($exception->getMessage()));
if ($exception instanceof HttpExceptionInterface) {
$response->setStatusCode($exception->getStatusCode());
$response->headers->replace($exception->getHeaders());
} else {
$response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
}
// sends the modified response object to the event
$event->setResponse($response);
}
}