src/EventListener/LogoutSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\User;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  7. use Symfony\Component\Security\Http\Event\LogoutEvent;
  8. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  9. class LogoutSubscriber implements EventSubscriberInterface
  10. {
  11.     private UrlGeneratorInterface $urlGenerator;
  12.     private FlashBagInterface $flash;
  13.     public function __construct(
  14.         UrlGeneratorInterface $urlGenerator,
  15.         FlashBagInterface $flash
  16.     ) {
  17.         $this->urlGenerator $urlGenerator;
  18.         $this->flash $flash;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [LogoutEvent::class => 'onLogout'];
  23.     }
  24.     public function onLogout(LogoutEvent $event): void
  25.     {
  26.         // get the security token of the session that is about to be logged out
  27.         $token $event->getToken();
  28.         /** @var \App\Entity\User */
  29.         $user $token->getUser();
  30.         if ($user->getSubscriptionActive() || in_array('ROLE_ADMIN'$user->getRoles())) {
  31.             return;
  32.         }
  33.         // get the current request
  34.         $request $event->getRequest();
  35.         // get the current response, if it is already set by another listener
  36.         $response $event->getResponse();
  37.         $this->flash->add(
  38.             'notice',
  39.             'Your membership has expired. Please renew it by contacting us'
  40.         );
  41.         // configure a custom logout response to the homepage
  42.         $response = new RedirectResponse(
  43.             $this->urlGenerator->generate('app_login'),
  44.             RedirectResponse::HTTP_SEE_OTHER
  45.         );
  46.         $event->setResponse($response);
  47.     }
  48. }