2016-06-04 6 views
3

Ich habe ein einfaches Login-Formular:Symfony3, stellen Benutzer letztes Login Datum

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, 
     ] 
    ); 
} 

security.yml:

secured_area: 
    form_login: 
     provider: user_db_provider 
     login_path: /login 
     check_path: /login 
     csrf_token_generator: security.csrf.token_manager 

Und ich versuche, den letzte Anmeldezeit des Benutzers einzustellen.

Muss ich wirklich einen neuen Listener erstellen und eine ganze Klasse schreiben, wie this answer, nur für diesen einzigen Befehl: $user->setLastLogin(new \DateTime());? Oder gibt es etwas einfacheres, als es in den Controller zu stecken?

+0

Ja, dafür sind Event Listeners/Subscriber zuständig. – ccKep

Antwort

1

Ja, Sie müssen einen Login-Erfolg-Listener erstellen, wie in this answer beschrieben, und verwenden Sie die onAuthenticationSuccess-Methode, um Ihre Benutzerinformationen zu speichern.

Der von Ihnen gepostete Code dient zum Generieren der Anmeldeseite. Jede Anmeldeaktion wird von der Firewall ausgeführt, die entweder einen Erfolgs- oder einen Fehlerlistener aufruft. Sie können Ihren Code in Ihrem benutzerdefinierten Listener ausführen (z. B. den letzten erfolgreichen Login-Zeitstempel festlegen).

Der Grund dafür ist, dass es besser ist, Klassen zu erstellen, die eine einzelne Aufgabe ausführen, anstatt viel Code in einer Klasse zusammenzufassen. Dies hält Ihre Modularität, Erweiterbarkeit und Wartungsfreundlichkeit Ihres Codes aufrecht.

Verwandte Themen