web-dev-qa-db-fra.com

Quelle est la meilleure pratique pour afficher l'ancienne valeur lors de la modification d'un formulaire dans Laravel?

J'écris la logique d'un formulaire d'édition et j'ai quelques complications lors de l'affichage des données dans les entrées.

Lorsque je montre initialement le formulaire, je montre les valeurs des enregistrements comme:

value="{{$dog->title}}"

Ensuite, lorsque le formulaire ne passe pas la validation, je dois montrer l'ancienne entrée, afin que l'utilisateur ne perde pas ce qu'il a déjà entré. J'ai donc besoin d'avoir un moyen d'afficher les anciennes données comme:

value="{{old('title')}}"

Parce que je dois saisir d'anciennes données au cas où elles existent, je me suis retrouvé avec ce code:

value="{{$dog->title or old('title')}}"

Et dans le contrôleur, je vérifie si Request a une ancienne entrée, j'attribue au $ dog var une valeur nulle.

Je voulais demander si cela est considéré comme une pratique correcte ou existe-t-il une meilleure façon et "correcte" de le faire?

15
naneri

Fonction ancienne avoir par défaut paramètre si aucune ancienne donnée trouvée dans la session.

function old($key = null, $default = null)

Vous pouvez remplacer l'expression dans le modèle par

value="{{old('title', $dog->title)}}"
49
ikurcubic

Je sais que cela a déjà été répondu, mais je pensais que je laisserais un petit snipet ici pour d'autres à l'avenir.

La définition de l'ancienne valeur d'entrée comme @ikurcubic publiée peut être utilisée de la même manière sur le bouton radio ou sélectionnez:

<input type="text" name="name" value="{{ old('name', $DB->default-value) }}" />

Sélectionnez une option:

<option value="Jeff" {{ old('name', $DB->default-value) == 'Jeff' ? selected : '' }}>Jeff</option>

Bouton radio:

<input type="radio"  name="gender" value="M" {{ old('name', $DB->default-value)== "M" ? 'checked' : '' }} />

Une autre façon de le faire: écrivez une petite instruction if pour déterminer la valeur à évaluer.

@php                                  
if(old('name') !== null){
    $option = old('name'); 
}
else{ $option = $database->value; }
@endphp

<select name="name">
   <option value="Bob" {{ $option == 'Bob' ? selected : '' }}>Bob</option>
   <option value="Jeff" {{ $option == 'Jeff' ? selected : '' }}>Jeff</option>
</select>


<input type="radio"  name="gender" value="M" {{ $option == "M" ? 'checked' : '' }} />

<input type="radio"  name="gender" value="F" {{ $option == "F" ? 'checked' : '' }} />

Définition de l'ancienne valeur d'entrée avec un nom de tableau, par exemple nom = "nom []":

<input type="text" name="name[]" value="{{ old('name.0) }}" />

Cela vous donnera l'ancienne valeur de l'entrée avec un indice de 0

J'ai testé cela et ça marche, j'espère que ça aide quelqu'un.

2
Jelly Bean

Il n'y a rien de mal à la façon dont vous faites les choses, car Laravel donne plusieurs façons de gérer la situation que vous décrivez.

Ce que je suggérerais, c'est d'utiliser les packages Laravel Collective Form et HTML pour créer votre formulaire. Ce package gérera automatiquement la liaison des anciennes valeurs de demande à votre formulaire si la validation échoue.

https://laravelcollective.com/docs/5.2/html

0
Rob Fonseca