src/EventSubscribers/LogoutSubscriber.php line 36

  1. <?php
  2. namespace App\EventSubscribers;
  3. use App\Repository\SessionRepository;
  4. use App\Repository\UserRepository;
  5. use DateTimeImmutable;
  6. use Symfony\Bundle\SecurityBundle\Security;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  11. use Symfony\Component\Security\Http\Event\LogoutEvent;
  12. use Symfony\Component\Security\Http\Firewall\LogoutListener;
  13. class LogoutSubscriber implements EventSubscriberInterface
  14. {
  15.     private UserRepository $userRepository;
  16.     private $security;
  17.     /**
  18.      * @param UrlGeneratorInterface $urlGenerator
  19.      * @param UserRepository $userRepository
  20.      */
  21.     public function __construct(private UrlGeneratorInterface $urlGeneratorUserRepository $userRepositorySecurity $security)
  22.     {
  23.         $this->userRepository $userRepository;
  24.         $this->security $security;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [LogoutEvent::class => 'onLogout'];
  29.     }
  30.     public function onLogout(LogoutEvent $event): void
  31.     {
  32.         $user $this->security->getUser();
  33.         // get the security token of the session that is about to be logged out
  34.         $token $event->getToken();
  35.         // get the current request
  36.         $request $event->getRequest();
  37.         // get the current response, if it is already set by another listener
  38.         $response $event->getResponse();
  39.         // configure a custom logout response to the homepage
  40.         $response = new RedirectResponse(
  41.             $this->urlGenerator->generate('app_home'),
  42.             Response::HTTP_SEE_OTHER
  43.         );
  44.         $event->setResponse($response);
  45.     }
  46. }