<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Exception\LogoutException;
use Symfony\Component\Security\Core\Security;
class LogoutExceptionSubscriber implements EventSubscriberInterface
{
public function __construct(private Security $security, private UrlGeneratorInterface $urlGenerator)
{
}
public function onKernelException(ExceptionEvent $event): void
{
$exception = $event->getThrowable();
/** @var FlashBagInterface $flashes */
$flashes = $event->getRequest()->getSession()->getBag('flashes');
if (!($exception instanceof LogoutException)) {
return;
}
if ($this->security->getUser()) {
$flashes->add('danger', 'Échec de la déconnexion. Merci de bien vouloir réessayer.');
}
$event->setResponse(new RedirectResponse($this->urlGenerator->generate('home')));
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::EXCEPTION => [
// set the priority higher than the Sentry subscriber (which is currently at 128)
['onKernelException', 130],
],
];
}
}