src/EventSubscriber/LogoutSubscriber.php line 23

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\HistoriqueConnexion;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Security\Http\Event\LogoutEvent;
  7. class LogoutSubscriber implements EventSubscriberInterface
  8. {
  9.     private EntityManagerInterface $em;
  10.     public function __construct( EntityManagerInterface $em) {
  11.         $this->em = $em;
  12.     }
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [LogoutEvent::class => 'onLogout'];
  16.     }
  17.     public function onLogout(LogoutEvent $event): void
  18.     {
  19.         $historique = new HistoriqueConnexion();
  20.         $historique->setUtilisateur($event->getToken()->getUser());
  21.         $historique->setDate(new \DateTimeImmutable('now'));
  22.         $historique->setAction('Déconnexion');
  23.         if($event->getRequest()->query->get('_remote_addr'))
  24.         {
  25.             $historique->setAdresseIp($event->getRequest()->query->get('_remote_addr'));
  26.             $event->getRequest()->query->remove('_remote_addr');
  27.         }
  28.         else
  29.         {
  30.             $historique->setAdresseIp("Non renseignée");
  31.         }
  32.         $this->em->persist($historique);
  33.         $this->em->flush();
  34.     }
  35. }