{% extends 'base.html.twig' %} {# ══════════════════════════════════════════════════════════════════ Template de connexion — security/login.html.twig ══════════════════════════════════════════════════════════════════ Page de connexion autonome : aucune sidebar ni topbar ne s'affiche (app.user est null → les blocs conditionnels de base.html.twig sont ignorés). Fonctionnement du formulaire : - Action : POST vers app_login (check_path = app_login) - Identifiant : champ _username (mapped sur User::email) - Mot de passe : champ _password - CSRF : token 'authenticate' (stateless, signé par APP_SECRET) - Remember-me : case _remember_me (cookie 7 jours, httponly, SameSite=Lax) Gestion des erreurs : $error est injecté par SecurityController::login() via AuthenticationUtils::getLastAuthenticationError(). Le message est traduit via le domaine 'security'. Styles : Tous les styles sont déclarés en ligne dans le bloc body (pas de fichier CSS dédié) pour garder la page autonome. Palette : vert #79b92c (bouton, focus, accent), gris clair (fond). ══════════════════════════════════════════════════════════════════ #} {% block title %}Connexion{% endblock %} {% block body %} {# Carte centrée sur fond gris — occupe toute la hauteur de l'écran #}
Application de gestion du pointage