Определите выбранный вариант со старым входом в 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, например?

Ответ 1

Решение состоит в сравнении Input::old() с переменной $key.

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

Ответ 2

Кроме того, вы можете использовать оператор ?, чтобы не использовать синтаксис @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>

Ответ 3

После игры немного я придумал это и, похоже, работает просто великолепно

<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), но, заметив, что если мой старый ('options') был пустым, он будет ошибочно, потому что для этого требуется in_array, догадался массив. Поэтому, найдя решение этого, хотя и уродливого решения, я играл с методом сбора, потому что в конце концов мы используем личинку прямо! так или иначе, уродливое решение выглядит следующим образом

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

inline, но человек, который выглядит уродливым для меня настолько длинным рассказом, я использую вместо этого

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

Надеюсь, это поможет другим!

Это, похоже, не работает для поля с несколькими несколькими полями, но я не могу вернуться с тем, который работает для этого.

Ответ 4

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

Ответ 5

Лучший способ сделать это:

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

Ответ 6

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

Ответ 7

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

Ответ 8

Мое решение здесь - это цикл, чтобы избежать дублирования опции

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

Ответ 9

Вместо использования класса ввода вы также можете использовать помощник old(), чтобы сделать это еще короче.

<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">

Ответ 10

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

Ответ 11

Хорошо, мои 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>

Ответ 12

Это довольно просто понять и реализовать.

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