<?php
// src/EventListener/LoginSubscriber.php
namespace App\EventListener;
use App\Entity\User as AppUser;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
use Doctrine\ORM\EntityManagerInterface;
// https://symfonycasts.com/screencast/deep-dive/event-listener
// https://rihards.com/2018/symfony-login-event-listener/
class LoginSubscriber implements EventSubscriberInterface
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public static function getSubscribedEvents(): array
{
return [LoginSuccessEvent::class => 'onLogin'];
}
public function onLogin(LoginSuccessEvent $event): void
{
// get the security token of the session that is about to be logged out
$user = $event->getUser();
if (!$user instanceof AppUser) {
return;
}
// Update your field here.
$user->setLastLogin(new \DateTime());
// Persist the data to database.
$this->em->persist($user);
$this->em->flush();
}
}