Php Symfony 2登录后做一些额外的工作

Php Symfony 2登录后做一些额外的工作,php,symfony,login,Php,Symfony,Login,在本例中,在成功登录之后,我需要将用户的登录时间更新到基础表中 用户实体当前实现了UserInterface,并且运行良好。只想添加一些额外的代码来记录用户的登录日期和时间 在我看来,搜索该网站似乎使用了EventListener等工具,这有点沉重。其他更轻的替代方案?您可以实施一个Success Hander 编写一个实现AuthenticationSuccessHandlerInterface的类: 将其定义为服务(您可以注入其他服务,如doctrine 或安全上下文(在您的情况下为会话)

在本例中,在成功登录之后,我需要将用户的登录时间更新到基础表中

用户实体当前实现了
UserInterface
,并且运行良好。只想添加一些额外的代码来记录用户的登录日期和时间


在我看来,搜索该网站似乎使用了EventListener等工具,这有点沉重。其他更轻的替代方案?

您可以实施一个Success Hander

  • 编写一个实现
    AuthenticationSuccessHandlerInterface
    的类:
  • 将其定义为服务(您可以注入其他服务,如doctrine 或安全上下文(在您的情况下为会话)
  • 在安全配置中添加处理程序服务,如:

    firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    
    secured_area:
        pattern:   ^/
        anonymous: ~
        form_login:
            login_path:  login
            check_path:  login_check
            success_handler: some.service.id
        logout:
            path: logout
            target: /
    
    检查完整的示例和所有symfony2安全配置选项(您也可以配置故障处理程序)

    在我的工作解决方案中,我在侦听器中实现了securityInteractivelogin方法,如下所示:

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
        {
            $user = $event->getAuthenticationToken()->getUser();
    
            $user->setLastLogin(new \Datetime());
            // Entity manager injected by container in the service definition
            $this->em->persist($user); 
            $this->em->flush();
    
    
        }
    

    希望此帮助不要使用事件侦听器。这是最好的方法。这应该是处理登录成功/失败的方法。嗨,TaylorR。如果这个或任何答案都解决了你的问题,请点击检查标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。