Définir L'option sélectionnée avec L'ancienne entrée 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>

donc quand le formulaire a des erreurs j'utilise la ligne Redirect::route('xpto')->withInput()->withErrors($v). Mais je ne peux pas repeupler les champs select. De toute façon de le faire sans l'aide de JavaScript par exemple?

14
demandé sur Christopher 2015-03-19 18:11:14

11 réponses

vous pouvez aussi utiliser le ? opérateur pour éviter d'avoir à utiliser @if @else @endif syntaxe. Modifier:

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

Simplement:

<option value="{{ $key }}" {{ (Input::old("title") == $key ? "selected":"") }}>{{ $val }}</option>
40
répondu Tim Lewis 2015-03-19 15:25:47

La solution est de comparer Input::old()$key variable.

@if (Input::old('title') == $key)
      <option value="{{ $key }}" selected>{{ $val }}</option>
@else
      <option value="{{ $key }}">{{ $val }}</option>
@endif
4
répondu Christopher 2015-03-19 15:16:10

Après avoir joué un peu, j'ai trouvé ça et il semble fonctionner juste magnifiquement

<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 peux me tromper à 100% en utilisant la fonction collect mais cela fonctionne très bien sur beaucoup de mes tests. Après avoir vu quelques autres messages sur le site, j'ai vu quelqu'un recommander de tirer parti de la fonction in_array($needle, $array) mais après avoir remarqué que si mon ancien('options') était nul, il y aurait erreur car il nécessite in_array requires, je parie que vous avez deviné un tableau. Donc, après avoir trouvé la solution à cette solution bien que laid j'ai joué avec la méthode de collecte parce qu'après tout, nous utilisons larval droit! en tout cas, la mauvaise solution est la suivante

@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif

inline mais l'homme qui semble laid pour moi c'est une longue histoire courte, je suis en utilisant ce qui suit

{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}

Espérons que cela aide les autres!!

cela ne semble pas fonctionner pour un champ select Non multiple ill revenir avec un qui fonctionne pour cela cependant.

4
répondu Carlos Quinones 2016-10-04 23:57:46
<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>
2
répondu G-Rajendra 2017-11-30 07:59:37

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>
2
répondu bikash bhandari 2017-12-12 06:33:46
<option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>
1
répondu Aleh 2017-05-22 19:55:18

ma solution ici est de boucler, juste pour éviter l'option Dupliquer

                            <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
répondu Marlon Bernal 2017-10-05 13:14:32
<select>
    @if(old('value') =={{$key}})
     <option value="value" selected>{{$value}}</option>
    @else
     <option value="value">{{$value}}</option>
    @endif
</select>
0
répondu Unni Bhaskar 2017-10-20 07:00:33

au lieu d'utiliser la classe Input, vous pouvez aussi utiliser l'ancien helper() pour rendre cela encore plus court.

<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
0
répondu alekbless 2018-01-16 19:49:39

OK, mes 2 cents, en utilisant la valeur par défaut de L'ancienne fonction() 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
répondu Milkmannetje 2018-02-07 09:47:12
      <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>
0
répondu Riki krismawan 2018-04-20 10:53:32