Ответ 1
Решение состоит в сравнении Input::old()
с переменной $key
.
@if (Input::old('title') == $key)
<option value="{{ $key }}" selected>{{ $val }}</option>
@else
<option value="{{ $key }}">{{ $val }}</option>
@endif
У меня есть этот код:
<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, например?
Решение состоит в сравнении Input::old()
с переменной $key
.
@if (Input::old('title') == $key)
<option value="{{ $key }}" selected>{{ $val }}</option>
@else
<option value="{{ $key }}">{{ $val }}</option>
@endif
Кроме того, вы можете использовать оператор ?
, чтобы не использовать синтаксис @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>
После игры немного я придумал это и, похоже, работает просто великолепно
<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':'' }}
Надеюсь, это поможет другим!
Это, похоже, не работает для поля с несколькими несколькими полями, но я не могу вернуться с тем, который работает для этого.
<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>
Лучший способ сделать это:
<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 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>
<option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>
Мое решение здесь - это цикл, чтобы избежать дублирования опции
<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>
Вместо использования класса ввода вы также можете использовать помощник old(), чтобы сделать это еще короче.
<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
<select>
@if(old('value') =={{$key}})
<option value="value" selected>{{$value}}</option>
@else
<option value="value">{{$value}}</option>
@endif
</select>
Хорошо, мои 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>
Это довольно просто понять и реализовать.
<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>