


Laravel remplit automatiquement les données saisies par l'utilisateur après l'échec de la validation du formulaire
Oct 12, 2025 am 05:03 AMDans le développement d'applications Web, après qu'un utilisateur a soumis un formulaire, si les données échouent à la vérification c?té serveur, il est généralement nécessaire de rediriger l'utilisateur vers la page du formulaire et d'afficher un message d'erreur. Cependant, un problème courant de l'expérience utilisateur est que lorsqu'une redirection se produit, les données que l'utilisateur a saisies dans le formulaire sont perdues et l'utilisateur doit remplir à nouveau tous les champs. Cela augmente non seulement la charge opérationnelle de l'utilisateur, mais peut également entra?ner sa perte. Laravel fournit un mécanisme simple et puissant pour résoudre ce problème, notamment via la méthode withInput() et la fonction d'assistance old().
Méthode withInput() dans le contr?leur
L'instance Validator de Laravel détecte toutes les erreurs de validation lorsque la validation du formulaire échoue. En règle générale, nous redirigeons l'utilisateur vers la page du formulaire avec ces messages d'erreur. Afin de conserver les données du formulaire soumises par l'utilisateur en même temps, nous devons appeler la méthode withInput() lors de la redirection.
La fonction de la méthode withInput() est de flasher toutes les données d'entrée de la requête en cours dans la session. Cela signifie que les données ne seront disponibles que lors de la prochaine requête et seront automatiquement effacées de la session par la suite, évitant ainsi une accumulation inutile de données de session.
Exemple de code de question d'origine (entrée non conservée)?:
Le code suivant montre un scénario dans lequel, après l'échec de la vérification, il redirige uniquement avec un message d'erreur sans conserver les entrées de l'utilisateur?:
// ...autre code... $validator = Validator::make($request->all(), [ 'PageLanguage.title.*' => 'obligatoire', ],[ "required" => "Veuillez vérifier et remplir tous les champs obligatoires du formulaire." // Optimiser le message d'erreur]); si ($validator->fails()) { redirection de retour('admin/page/create') ->withErrors($validator); // Les données saisies par l'utilisateur ne seront pas conservées pour le moment} //...Logique après vérification...
Dans le code ci-dessus, si la vérification échoue, l'utilisateur sera redirigé vers la page admin/page/create, mais les données du formulaire précédemment remplies seront perdues.
Solution après avoir ajouté withInput()?:
Pour résoudre le problème de perte de données, ajoutez simplement la méthode ->withInput() dans la cha?ne de redirection?:
// ...autre code... $validator = Validator::make($request->all(), [ 'PageLanguage.title.*' => 'obligatoire', ],[ "required" => "Veuillez vérifier et remplir tous les champs obligatoires du formulaire." ]); si ($validator->fails()) { redirection de retour('admin/page/create') ->avecErreurs($validator) ->withInput(); // Ajoutez cette méthode pour conserver les données d'entrée de l'utilisateur} //...Logique après vérification...
Désormais, lorsque la validation échoue et redirige, les données du formulaire précédemment soumises (y compris tous les paramètres $_POST et $_GET) sont stockées dans la session pour la requête suivante.
Fonction d'assistance old() dans le modèle Blade
Après avoir flashé les données via withInput() dans le contr?leur, nous devons récupérer correctement les données dans le modèle Blade et les remplir dans les champs de formulaire appropriés. Laravel fournit la fonction d'assistance old() pour ce faire.
La fonction old() accepte un paramètre, l'attribut name du champ de saisie que vous souhaitez récupérer. Si le champ existe dans les données d'entrée en mémoire flash, old() renvoie sa valeur ; sinon, il renvoie null.
Exemple d'utilisation?:
En supposant que votre champ de formulaire soit nommé name, vous pouvez utiliser old() dans le modèle Blade comme ceci?:
<input type="text" name="name" value="{{ old('name') }}" class="form-control" placeholder="Veuillez entrer un nom">
Si votre application utilise un package auxiliaire de formulaire tel que LaravelCollective/html, son utilisation sera plus simple. Par exemple, pour une zone de saisie de texte?:
{!! Form::text('nom', old('nom'), ['class' => 'form-control', 'placeholder' => '']) !!}
Ici, le deuxième paramètre de Form::text est la valeur par défaut du champ. Lorsque old('name') renvoie une valeur, elle est utilisée comme valeur par défaut ; sinon, le champ sera vide.
Gérer l'entrée sous forme de tableau?:
Dans la question d'origine, la règle de validation est 'PageLanguage.title.*' => 'required', ce qui indique que le formulaire peut recevoir des entrées sous la forme d'un tableau, comme PageLanguage[title][0], PageLanguage[title][1], etc. La fonction old() prend également en charge cette forme d'accès?:
<!-- Pour une entrée comme PageLanguage[title][0] --> <input type="text" name="PageLanguage[title][0]" value="{{ old('PageLanguage.title.0') }}" class="form-control"> <!-- Ou si votre formulaire est généré dynamiquement, vous pouvez y accéder via une boucle --> @foreach($langues comme $index => $langue) <label for="title_{{ $index }}">{{ $langue->name }} titre?:</label> <type d name="PageLanguage[titre][{{ $index }}]" id="titre_{{ $index }}" value="{{ old('PageLanguage.title.' . $index) }}" classe="form-control"> @endforeach</type>
Notez que pour les tableaux imbriqués, la fonction old() utilise le point . pour accéder aux éléments enfants, tels que PageLanguage.title.0.
Points à noter et bonnes pratiques
- Valeur par défaut de la fonction old() : La fonction old() peut accepter le deuxième paramètre comme valeur par défaut. Lorsque le champ correspondant n'est pas trouvé dans les données flash, cette valeur par défaut sera utilisée. Ceci est particulièrement utile lors de la modification d'enregistrements existants.
<input type="text" name="name" value="{{ old('name', $user->name ?? '') }}" class="form-control">
Ici, si old('name') est vide, $user->name sera essayé.
- Fonctions d'assistance de formulaire?: bien que des packages comme LaravelCollective/html fournissent des méthodes de génération de formulaires pratiques, même sans les utiliser, il est parfaitement réalisable d'utiliser value="{{ old('field_name') }}" directement dans la balise HTML.
- Expérience utilisateur : Combinée aux messages d’erreur de validation et au remplissage des données, l’expérience utilisateur peut être grandement améliorée. Assurez-vous que le message d'erreur est clair, précis et indique quel champ doit être corrigé.
- Sécurité : La valeur renvoyée par la fonction old() a été automatiquement encodée par Laravel en entités HTML pour empêcher les attaques XSS. Par conséquent, il n’est généralement pas nécessaire de coder à nouveau manuellement.
Résumer
En utilisant intelligemment la méthode withInput() dans le contr?leur Laravel et en combinant la fonction d'assistance old() dans le modèle Blade, nous pouvons facilement implémenter le remplissage automatique des données saisies par l'utilisateur après l'échec de la validation du formulaire. Ce mécanisme simplifie non seulement le processus de développement, mais, plus important encore, il offre aux utilisateurs une expérience de soumission de formulaire fluide et ininterrompue, évitant ainsi la frustration causée par la perte de données. La ma?trise de cette compétence est une étape cruciale dans la création d’applications Laravel conviviales.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Usefilter_var () tovalidateemailsyntaxandcheckdnsrr () toverifydomainmxrecords.example: $ email = "user@example.com"; if (f ilter_var ($ e-mail, filter_validate_email) && checkdnsrr (explosage ('@', $ e-mail) [1], 'mx')) {echo "ValidAndDeliverableMail & Qu

UseUnserialize (serialize ($ obj)) FordopcopyingwhenallDataisSerializable; Sinon, implémentez__Clone () TomanuallyDuplicatesedObjectsAndavoidSharedReferences.

UseArray_merge () toCombineArrays, écrasant leduplicatestringKeysAndreIndexingNumericKeys; ForsimplecCaTencatenation, en particulierInphp5.6, usethesplatoperator [... $ array1, ... $ array2].

NamespacesInphporganizEcodeAndPreventnamingConflictsBygroupingClasses, Interfaces, Functions et ConstantsunSunSaspecificName.2.DefineanamespaceusingTheNamesPaceSpaceKeyWordAtTopofaFile, suiviByTheNamesPacename, Suchasapp \ Controlers...USUSEUSEKEYWORDTOI

ToupDateAdatabasereCorDinPhp, FirstConnectUsingPDoOrmysQLi, theNusepreparedStationStoExECUSEASECURSQLUPDATEQUERY.example: $ pdo = newPDO ("MySql: host = localhost; dbname = votre_database", $ username, $ mot de passe); $ sql = "dameussem =.

La méthodiette () méthodiste axée sur le point de réviser la mise en ?uvre de l'inscription, ce qui permet de faire de la maintenance à la qualité de qualité et

UsePathinfo ($ nom de fichier, pathinfo_extension) togetThefileExtension; itreliabblyHandlesMultipledototsEdGasases, renvoyantTheExtension (par exemple, "pdf") oranemptystringefNoneExists.

Utilisez la classe Ziparchive pour créer un fichier zip. Instancier et ouvrir le zip cible, ajouter des fichiers avec addFile, prendre en charge les chemins internes personnalisés, les fonctions récursives peuvent emballer l'intégralité du répertoire et enfin appeler près pour enregistrer pour s'assurer que PHP a des autorisations d'écriture.
