web-dev-qa-db-ja.com

Laravel / Bladeの古い入力を使用して、選択したオプションを定義します

私はこのコードを持っています:

_<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>
_

したがって、フォームにエラーがある場合は、Redirect::route('xpto')->withInput()->withErrors($v)行を使用します。ただし、選択フィールドに再入力することはできません。たとえばJavaScriptを使用せずにこれを行う方法はありますか?

24
Christopher

解決策は、Input::old()$key変数。

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

また、?演算子を使用して、@if @else @endif構文。変化する:

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

単に:

<option value="{{ $key }}" {{ (Input::old("title") == $key ? "selected":"") }}>{{ $val }}</option>
52
Tim Lewis

少し遊んだ後、私はこれを思いついた、それは見事に動作するようだ

<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>

収集機能を活用するのは100%間違っているかもしれませんが、多くのテストでうまく機能します。サイトで他のいくつかの投稿を見た後、誰かがin_array($ needle、$ array)関数を活用することをお勧めしましたが、私のold( 'options')がnullの場合はin_arrayが必要なのでエラーになることに気づいたので、賭けます配列を推測しました。い解決策であるにもかかわらず、その解決策を見つけた後、collectメソッドを試しました。とにかくい解決策は次のとおりです

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

インラインですが、私にはugいように見えますが、長い話は短く、代わりに次のものを使用しています

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

これが他の人に役立つことを願っています!!

これは、非複数選択フィールドでは機能しないようですが、それでも機能するフィールドでは戻りません。

7
Carlos Quinones
<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>
7
G-Rajendra

最善の方法は次のとおりです

<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>
4
bikash bhandari

Inputクラスを使用する代わりに、old()ヘルパーを使用してこれをさらに短くすることもできます。

<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
3
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>
2
Riki krismawan
<option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>
1
Aleh

さて、私の2セント、Laravelのold()関数のデフォルト値を使用しています。

<select name="type">
    @foreach($options as $key => $text)
        <option @if((int) old('type', $selectedOption) === $key) selected @endif value="{{ $key }}">{{ $text }}</option>
    @endforeach
</select>
1
Milkmannetje

ここでの私の解決策は、オプションの重複を避けるためにループすることです

                            <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

これは理解して実装するのは非常に簡単です。

 <select class="form-control m-input m-input--air">
     @foreach ($countries as $key)
        @if( $key->name == $user->country )
            <option value="{{ $key->name }}" selected="selected"> {{ $key->name }}</option>
        @else
            <option value="{{ $key->name }}"> {{ $key->name }}</option>
        @endif
     @endforeach   
 </select>
0
Inamur Rahman
<select>
    @if(old('value') =={{$key}})
     <option value="value" selected>{{$value}}</option>
    @else
     <option value="value">{{$value}}</option>
    @endif
</select>
0
Unni Bhaskar