Dans notre projet précédent, renvoyer une vue directement à partir de la requête POST lorsque la validation échouait n'était pas la meilleure approche.
Lorsqu'un utilisateur soumet un formulaire de connexion avec des données non valides, le formulaire affiche des messages d'erreur et redirige l'utilisateur vers la page de connexion. Cependant, si l'utilisateur actualise la page ou s'éloigne et revient à la page de connexion, les mêmes messages d'erreur persistent.
Pour résoudre ce problème, nous pouvons utiliser des sessions pour stocker les erreurs et implémenter le modèle PRG. Nous pouvons stocker les erreurs dans la variable superglobale $_SESSION et mettre à jour l'instruction d'erreurs dans create.php comme :
$_SESSION['errors'] = $form->errors(); view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);?? [] ]);
Mais même avec ce changement, le problème persiste. Pour résoudre ce problème, nous devons modifier l'instruction return comme :
return redirect ('/login');redirection de retour ('/login');
je
Il déplace l'utilisateur vers la page de connexion si une erreur s'est produite, mais n'affiche pas l'erreur à l'utilisateur w
Nous flashons ensuite la variable superglobale $_SESSION pour détruire la session après un court laps de temps :
return redirect ('/login');$_SESSION['_flashed']['erreurs'] = $form->erreurs();
Vous pouvez maintenant remarquer que le problème est résolu mais pour refactoriser ce code, nous devons ajouter la méthode PRG dans une classe
Pour le refactoring, nous créons un nouveau fichier nommé Core/Session.php contenant une classe Session qui gère les sessions utilisateur :
return redirect ('/login');
En utilisant cette classe Session, nous pouvons implémenter le modèle PRG et le flashage de session pour gérer les sessions utilisateur et empêcher les soumissions de formulaires en double et la persistance indésirable des messages d'erreur.
Dans ce fichier, la méthode has renvoie une valeur booléenne indiquant si une clé existe dans la session :
return redirect ('/login');. la fonction statique publique a ($ clé) { return (bool) static :: get ($ clé); }
Dans le fichier function.php, nous refactorisons la fonction de déconnexion pour utiliser la classe Session :
return redirect ('/login');Session :: détruire ();
Comme le projet fonctionne déjà bien. Mais nous devons refactoriser la méthode get dans Core/Session.php pour consolider le code en une seule instruction :
return redirect ('/login');fonction statique publique get($key, $default = null) { return $_SESSION['_flash'][$key] ?? $_SESSION[$clé] ?? $par défaut ; }
De nombreuses refactorisations sont effectuées dans notre projet actuel pour le rendre meilleur, plus facile à comprendre et augmenter les performances du code.
J'espère que vous l'avez bien compris !.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3