src/EventSubscriber/UserSubscriber.php line 148
<?phpnamespace App\EventSubscriber;use App\Entity\AppConstants;use App\Entity\Inscription;use App\Entity\User;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Session\SessionInterface;use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;use Symfony\Component\Security\Http\Event\LoginFailureEvent;use Symfony\Component\Security\Http\Event\LoginSuccessEvent;use Symfony\Component\HttpKernel\Event\RequestEvent;use Symfony\Component\HttpKernel\Event\ResponseEvent;use Symfony\Component\HttpKernel\KernelEvents;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Security\Http\Event\LogoutEvent;class UserSubscriber implements EventSubscriberInterface{private ParameterBagInterface $parameterBag;private EntityManagerInterface $em;private UrlGeneratorInterface $urlGenerator;public function __construct(ParameterBagInterface $parameterBag, EntityManagerInterface $em, UrlGeneratorInterface $urlGenerator){$this->parameterBag = $parameterBag;$this->em = $em;$this->urlGenerator = $urlGenerator;}public static function getSubscribedEvents(): array{return [// KernelEvents::REQUEST => 'onKernelRequest',// KernelEvents::RESPONSE => 'onKernelResponse',InteractiveLoginEvent::class => 'onInteractiveLogin',// LoginSuccessEvent::class => 'onLoginSuccess',// LoginFailureEvent::class => 'onFailureSuccess',LogoutEvent::class => 'onLogout'];}public function onInteractiveLogin(InteractiveLoginEvent $event): void{/** @var User $user */$user = null;if ($event->getAuthenticationToken()) {$user = $event->getAuthenticationToken()->getUser();}/** @var User $user */if ($user) {$user->setLastLoginAt(new \DateTime());$this->em->persist($user);$this->em->flush();/** @var SessionInterface $session */$session = null;if ($user->hasRole(User::ROLE_MEMBER) && $event->getRequest() && $session = $event->getRequest()->getSession()) {$inscription_reference = null;if ($session->has(AppConstants::SESSION_INSCRIPTION_REFERENCE) && $inscription_reference = $session->get(AppConstants::SESSION_INSCRIPTION_REFERENCE)) {if ($inscription_reference) {/** @var Inscription $inscription */$inscription = $this->em->getRepository(Inscription::class)->findOneBy(['reference' => $inscription_reference]);if ($inscription && empty($inscription->getUser())) {$inscription->setUser($user);$this->em->persist($inscription);$this->em->flush();$session->remove(AppConstants::SESSION_INSCRIPTION_REFERENCE);}}}}}if (function_exists('dump')) :// dump(@compact('event', 'user'));endif;}/*public function onLoginSuccess(LoginSuccessEvent $event){/ ** @var User $user * /$user = $event->getUser();$request = $event->getRequest();$session = $request->getSession();if ($user->hasRole(User::ROLE_MEMBER)) {// dd(@compact('request'));$response = $event->getResponse();if ($request->attributes->get('_route') === 'app_user_login') {if ($session && $session->has(AppConstants::SESSION_INSCRIPTION_REFERENCE) && $session->get(AppConstants::SESSION_INSCRIPTION_REFERENCE)) {$response = $this->guardHandler->authenticateUserAndHandleSuccess($user,$event->getRequest(),$this->authenticator,// $event->getAuthenticator(),'member_area');}}// $event->setResponse($response);}$this->em->flush();//dd($user);}*//*public function onFailureSuccess(LoginFailureEvent $event){$request = $event->getRequest();}*//*public function onKernelRequest(RequestEvent $event): void{if (!$event->isMainRequest()) {// don't do anything if it's not the main requestreturn;}if (function_exists('dump')) :// dump(@compact('event'));endif;}public function onKernelResponse(ResponseEvent $event): void{if (function_exists('dump')) :// dump(@compact('event'));endif;}*/public function onLogout(LogoutEvent $event): void{// get the security token of the session that is about to be logged out// $token = $event->getToken();// get the current request$request = $event->getRequest();if ($session = $request->getSession()) {if ($session->has(AppConstants::SESSION_EVENEMENT_REFERENCE)) {$session->remove(AppConstants::SESSION_EVENEMENT_REFERENCE);}if ($session->has(AppConstants::SESSION_INSCRIPTION_REFERENCE)) {$session->remove(AppConstants::SESSION_INSCRIPTION_REFERENCE);}}// get the current response, if it is already set by another listener$response = $event->getResponse();// configure a custom logout response to the homepage$response = new RedirectResponse($this->urlGenerator->generate('app_user_login'),RedirectResponse::HTTP_SEE_OTHER);$event->setResponse($response);}}