web-dev-qa-db-fra.com

Définir l'option sélectionnée avec l'ancienne entrée dans Laravel/Blade

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?

20
Christopher

La solution consiste à comparer Input::old() avec la $keyvariable.

@if (Input::old('title') == $key)
      <option value="{{ $key }}" selected>{{ $val }}</option>
@else
      <option value="{{ $key }}">{{ $val }}</option>
@endif
8
Christopher

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>
44
Tim Lewis

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.

6
Carlos Quinones

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>
3
bikash bhandari
<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>
3
G-Rajendra
<option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>
1
Aleh

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 }}">
1
5less
      <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>
1
Riki krismawan

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>
1
Marlon Bernal

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>
0
Milkmannetje
<select>
    @if(old('value') =={{$key}})
     <option value="value" selected>{{$value}}</option>
    @else
     <option value="value">{{$value}}</option>
    @endif
</select>
0
Unni Bhaskar