<?php
namespace App\EventSubscriber;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
class ExceptionSubscriber implements EventSubscriberInterface
{
public function __construct(
private UrlGeneratorInterface $urlGenerator
)
{
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::EXCEPTION => 'onException',
];
}
public function onException(ExceptionEvent $event): void
{
$exception = $event->getThrowable();
$statusCode = 0;
if ($exception instanceof HttpExceptionInterface) {
$statusCode = $exception->getStatusCode();
}
if($statusCode === 404 && $_ENV['APP_ENV'] !== 'dev'){
$event->setResponse(new RedirectResponse($this->urlGenerator->generate('404_exception')));
}
elseif($_ENV['APP_ENV'] !== 'dev'){
$event->setResponse(new RedirectResponse($this->urlGenerator->generate('500_exception')));
}
}
}