Symfony3,设置用户上次登录日期

the*_*uts 5 php symfony

我有一个简单的登录表单:

public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');

    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();

    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render(
        'users/login.html.twig',
        [
            'page' => 'login',
            'last_username' => $lastUsername,
            'error'         => $error,
        ]
    );
}
Run Code Online (Sandbox Code Playgroud)

security.yml:

secured_area:
     form_login:
        provider: user_db_provider
        login_path: /login
        check_path: /login
        csrf_token_generator: security.csrf.token_manager
Run Code Online (Sandbox Code Playgroud)

我正在尝试设置用户的上次登录时间.

难道我真的要创建一个新的监听器,并写一整类,像这样的回答,只为这单指令:$user->setLastLogin(new \DateTime());?或者是否有更简单的东西,比如把它放在控制器中?

Hid*_*dde 3

是的,您必须创建一个登录成功侦听器,如本答案中所述,并使用onAuthenticationSuccess方法来存储您的用户信息。

您发布的代码用于生成登录页面本身。任何登录操作都由防火墙处理,防火墙调用成功或失败侦听器。您可以在自定义侦听器中执行代码(例如设置上次成功登录时间戳)。

原因是最好创建执行单个任务的类,而不是将大量代码放在一个类中。这可以保持代码的模块化、可扩展性和可维护性。