src/UserBundle/EventSubscriber/UserLoginEventSubscriber.php line 42

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of SolidInvoice project.
  5.  *
  6.  * (c) Pierre du Plessis <[email protected]>
  7.  *
  8.  * This source file is subject to the MIT license that is bundled
  9.  * with this source code in the file LICENSE.
  10.  */
  11. namespace SolidInvoice\UserBundle\EventSubscriber;
  12. use DateTimeImmutable;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use SolidInvoice\UserBundle\Entity\User;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  17. /**
  18.  * @see \SolidInvoice\UserBundle\Tests\EventSubscriber\UserLoginEventSubscriberTest
  19.  */
  20. final class UserLoginEventSubscriber implements EventSubscriberInterface
  21. {
  22.     public function __construct(
  23.         private readonly EntityManagerInterface $entityManager
  24.     ) {
  25.     }
  26.     /**
  27.      * @return array<string, string>
  28.      */
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             InteractiveLoginEvent::class => 'onLogin',
  33.         ];
  34.     }
  35.     public function onLogin(InteractiveLoginEvent $event): void
  36.     {
  37.         $user $event->getAuthenticationToken()->getUser();
  38.         assert($user instanceof User);
  39.         $user->setLastLogin(new DateTimeImmutable());
  40.         $this->entityManager->getRepository(User::class)->save($user);
  41.     }
  42. }