J'ai ce code:
<select required="required" class="form-control" name="title">
<option></option>
@foreach ($titles as $key => $val)
@if (stristr($key, 'isGroup'))
<optgroup label="{{ $val }}">
@else
<option value="{{ $key }}">{{ $val }}</option>
@endif
@endforeach
</select>
Ainsi, lorsque le formulaire contient des erreurs, j'utilise la ligne Redirect::route('xpto')->withInput()->withErrors($v)
. Mais je ne peux pas re-peupler les champs sélectionnés. Tout moyen de faire cela sans utiliser JavaScript par exemple?
La solution consiste à comparer Input::old()
avec la $key
variable.
@if (Input::old('title') == $key)
<option value="{{ $key }}" selected>{{ $val }}</option>
@else
<option value="{{ $key }}">{{ $val }}</option>
@endif
En outre, vous pouvez utiliser l'opérateur ?
pour éviter de devoir utiliser la syntaxe @if @else @endif
. Changement:
@if (Input::old('title') == $key)
<option value="{{ $key }}" selected>{{ $val }}</option>
@else
<option value="{{ $key }}">{{ $val }}</option>
@endif
Simplement pour:
<option value="{{ $key }}" {{ (Input::old("title") == $key ? "selected":"") }}>{{ $val }}</option>
Après avoir joué un peu, je suis arrivé à ça et ça semble fonctionner à merveille
<select name="options[]" id="options" class="form-control" multiple>
@foreach($settings->includes->get('optionList') as $option)
<option value="{{ $option->id }}" {{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}>{{ $option->name }}</option>
@endforeach
</select>
Je me trompe peut-être à 100% en utilisant la fonction de collecte, mais cela fonctionne très bien pour beaucoup de mes tests. Après avoir lu quelques articles sur le site, j'ai vu quelqu'un recommander l'utilisation de la fonction in_array ($ needle, $ array) mais après avoir remarqué que si mon ancienne option ('options') était nulle, l'erreur se produirait car elle nécessite in_array deviné un tableau. Donc, après avoir trouvé la solution à cette solution, certes laide, j'ai joué avec la méthode de collecte, car après tout, nous utilisons les larves correctement! eh bien la solution laide est la suivante
@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif
inline mais l'homme qui a l'air moche pour moi si longue histoire courte, j'utilise ce qui suit à la place
{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}
J'espère que cela aide les autres !!
Cela ne semble pas fonctionner pour un champ non multiple sélectionné, mais avec un champ qui fonctionne pour cela.
La meilleure façon de faire est de suivre
<select class="form-control" name="team" id="team">
<option value="">---------Choose Team---------</option>
@foreach($teams as $team)
<option value="{{$team->id}}" {{(old('team')==$team->id)? 'selected':''}}>{{$team->name}}</option>
@endforeach
</select>
eg.<select name="title">
<option value="1" {{ old('title') == 1 ? 'selected' : '' }}>
Item 1
</option>
<option value="2" {{ old('title') == 2 ? 'selected' : '' }}>
Item 2
</option>
</select>
<select name="gender" class="form-control" id="gender">
<option value="">Select Gender</option>
<option value="M" @if (old('gender') == "M") {{ 'selected' }} @endif>Male</option>
<option value="F" @if (old('gender') == "F") {{ 'selected' }} @endif>Female</option>
</select>
<option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>
Au lieu d'utiliser la classe d'entrée, vous pouvez également utiliser old () helper pour rendre cela encore plus court.
<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
<select class="form-control" name="kategori_id">
<option value="">-- PILIH --</option>
@foreach($kategori as $id => $nama)
@if(old('kategori_id', $produk->kategori_id) == $id )
<option value="{{ $id }}" selected>{{ $nama }}</option>
@else
<option value="{{ $id }}">{{ $nama }}</option>
@endif
@endforeach
</select>
Ma solution ici est de faire une boucle, juste pour éviter les doublons
<select class="form-control" name="status" >
<?php $lists = ['Current', 'Win', 'Lose']; ?>
@foreach($lists as $list)
<option value={{$list}} {{(old('status') == $list?'selected':'')}} >{{$list}}</option>
@endforeach
</select>
OK, mes 2 cents, en utilisant la valeur par défaut de la fonction old () de Laravel.
<select name="type">
@foreach($options as $key => $text)
<option @if((int) old('type', $selectedOption) === $key) selected @endif value="{{ $key }}">{{ $text }}</option>
@endforeach
</select>
<select>
@if(old('value') =={{$key}})
<option value="value" selected>{{$value}}</option>
@else
<option value="value">{{$value}}</option>
@endif
</select>