<?php
namespace App\EventListener;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
class KernelExceptionListener
{
private LoggerInterface $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function onKernelException(ExceptionEvent $event)
{
$exception = $event->getThrowable();
$code = $exception->getCode();
if (empty($code)) {
if (0 == $code && method_exists($exception, 'getStatusCode')) {
$code = $exception->getStatusCode();
} else {
$code = 500;
}
}
$data = [
'code' => $code,
'message' => $exception->getMessage(),
];
if ('dev' == $_ENV['APP_ENV']) {
$data['file'] = $exception->getFile();
$data['line'] = $exception->getLine();
$data['trace'] = $exception->getTrace();
}
if (500 == $code) {
$this->logger->critical($exception);
}
$event->setResponse((new JsonResponse())
->setContent(json_encode($data))
);
}
}