src/EventListener/LogoutSubscriber.php line 25

  1. <?php
  2. // src/EventListener/LogoutSubscriber.php
  3. namespace App\EventListener;
  4. use JetBrains\PhpStorm\ArrayShape;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Symfony\Component\Security\Http\Event\LogoutEvent;
  9. class LogoutSubscriber implements EventSubscriberInterface
  10. {
  11.     public function __construct(
  12.         private UrlGeneratorInterface $urlGenerator
  13.     ) {
  14.     }
  15.     #[ArrayShape([LogoutEvent::class => "string"])] public static function getSubscribedEvents(): array
  16.     {
  17.         //2 - Subscribe to LogoutEvent
  18.         return [LogoutEvent::class => 'onLogout'];
  19.     }
  20.     public function onLogout(LogoutEvent $event): void
  21.     {
  22.         // get the security token of the session that is about to be logged out
  23.         $token $event->getToken();
  24.         // 3. get the current request
  25.         $request $event->getRequest();
  26.         $route 'web_homepage';
  27.         // 5. get the current response, if it is already set by another listener
  28.         $response $event->getResponse();
  29.         // configure a custom logout response to the homepage
  30.         $response = new RedirectResponse(
  31.             $this->urlGenerator->generate($route),
  32.             RedirectResponse::HTTP_SEE_OTHER
  33.         );
  34.         $event->setResponse($response);
  35.     }
  36. }