使用 Laravel / Blade 中的旧输入定义所选选项
Define the selected option with the old input in 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)
。但我无法重新填充 select 字段。例如,有什么方法可以不使用 JavaScript 来做到这一点?
解决方案是使用 Blade Directives - If Statements.
将 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% 错误地利用了 collect 函数,但它在我的许多测试中都运行良好。在网站上看到其他一些帖子后,我看到有人建议利用 in_array($needle, $array) 函数,但在注意到如果我的 old('options') 为 null 后,它会出错,因为它requires in_array requires,打赌你猜到了一个数组。因此,在找到了这个虽然丑陋的解决方案的解决方案之后,我使用了 collect 方法,因为毕竟我们正确地使用了幼虫!好吧,无论如何,丑陋的解决方案如下
@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif
inline 但长话短说我看起来很丑的人我正在使用以下内容
{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}
希望这对其他人有帮助!!
这似乎不适用于非多个 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>
<select>
@if(old('value') =={{$key}})
<option value="value" selected>{{$value}}</option>
@else
<option value="value">{{$value}}</option>
@endif
</select>
<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>
除了使用 Input class,您还可以使用 old() 帮助程序来缩短它。
<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
好吧,我的 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" 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>
Laravel 6 或以上: 只需使用 old() 函数,例如 @if (old('cat')==$cat->id),它将为您完成剩下的工作。
它是如何工作的: select 标签将 selected 选项值存储到它的 name 属性中,如果你 select 任何它将存储到 cat 中的选项。第一次加载页面时,cat 中没有任何内容,当用户选择一个选项时,该 selected 选项的值存储到 cat 中,因此当用户被重定向时 old( ) 函数从 cat.
中提取先前的值
{!!Form::open(['action'=>'CategoryController@storecat', 'method'=>'POST']) !!}
<div class="form-group">
<select name="cat" id="cat" class="form-control input-lg">
<option value="">Select App</option>
@foreach ($cats as $cat)
@if (old('cat')==$cat->id)
<option value={{$cat->id}} selected>{{ $cat->title }}</option>
@else
<option value={{$cat->id}} >{{ $cat->title }}</option>
@endif
@endforeach
</select>
</div>
<div class="from-group">
{{Form::label('name','Category name:')}}
{{Form::text('name','',['class'=>'form-control', 'placeholder'=>'Category name'])}}
</div>
<br>
{!!Form::submit('Submit', ['class'=>'btn btn-primary'])!!}
{!!Form::close()!!}
这对你有帮助,如果存在则与旧值进行比较,如果不存在则与默认值进行比较
<select name="select_name">
@foreach($options as $key => $text)
<option {{ ($key == old('select_name',$default))?'selected':'' }}> {{ $text }} </option>
@endforeach
</select>
$default
是从控制器注入到视图的值
<select style="width: 100%;" name="id_driver" id="id_driver" >
<option value="" @if (old('id_driver') == "") selected @endif>Select</option>
@foreach(\App\Driver::all() as $driver)
<option value="{{$driver->id}}" @if (old('id_driver') == $driver->id)
selected @endif >(#{{$driver->id}}) {{$driver->business_name}}
</option>
@endforeach
</select>
考虑到用户也想编辑他们之前的输入,
<select name="title">
@foreach ($titles as $key => $value)
<option value="{{$value->id}}" {{(old('title', $user->title_id) == $value->id ? 'selected' : '')}} > {{$value->name}} </option>
@endforeach
</select>
old('title', $user->title_id) returns 用户保存 title_id 第一次,如果验证失败它 returns 用户选择title_id。然后如果它与当前选项id匹配,则它被选中。
许多答案演示了使用三元运算符的一个衬里,但我认为使用 @if 更具可读性,至少对于初学者而言。如果没有 else 语句,以下内容就足够了。
<option value="{{ $key }}" @if(old('title')===$key) selected @endif>{{ $val }}</option>
Laravel 8.59.0 的简洁明了的用法示例(使用旧的预选编辑表单)
您可以将它用于您的编辑页面。它带有来自数据库的默认选择,如果您提交了未通过验证的表单,则会通过包含 old
.
返回答案
<select name="brand_id">
@foreach ($brands as $brand)
<option value="{{ $brand->id }}" @if ($product->brand_id === $brand->id || old('brand_id') === $brand->id) selected @endif>{{ $brand->title }}</option>
@endforeach
</select>
通过错误验证实现改进 CodeToLife 的答案,如下所示
<div class="form-group row">
<label for="person-field" class="col-md-4 col-form-label text-right">First Person</label>
<div class="col-md-6">
<select id="person-field" class="custom-select select2 @error('person') is-invalid @enderror" name="person" required>
<option></option>
@foreach(\App\User::all() as $user)
<option value="{{$user->id}}" @if (old('person') == $user->id) selected @endif>{{$user->name}}
</option>
@endforeach
</select>
@error('person')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
Laravel 9 Checked / Selected / Disabled
<select name="version">
@foreach ($product->versions as $version)
<option value="{{ $version }}" @selected(old('version') == $version)>
{{ $version }}
</option>
@endforeach
</select>
我有这个代码:
<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)
。但我无法重新填充 select 字段。例如,有什么方法可以不使用 JavaScript 来做到这一点?
解决方案是使用 Blade Directives - If Statements.
将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% 错误地利用了 collect 函数,但它在我的许多测试中都运行良好。在网站上看到其他一些帖子后,我看到有人建议利用 in_array($needle, $array) 函数,但在注意到如果我的 old('options') 为 null 后,它会出错,因为它requires in_array requires,打赌你猜到了一个数组。因此,在找到了这个虽然丑陋的解决方案的解决方案之后,我使用了 collect 方法,因为毕竟我们正确地使用了幼虫!好吧,无论如何,丑陋的解决方案如下
@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif
inline 但长话短说我看起来很丑的人我正在使用以下内容
{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}
希望这对其他人有帮助!!
这似乎不适用于非多个 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>
<select>
@if(old('value') =={{$key}})
<option value="value" selected>{{$value}}</option>
@else
<option value="value">{{$value}}</option>
@endif
</select>
<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>
除了使用 Input class,您还可以使用 old() 帮助程序来缩短它。
<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
好吧,我的 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" 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>
Laravel 6 或以上: 只需使用 old() 函数,例如 @if (old('cat')==$cat->id),它将为您完成剩下的工作。
它是如何工作的: select 标签将 selected 选项值存储到它的 name 属性中,如果你 select 任何它将存储到 cat 中的选项。第一次加载页面时,cat 中没有任何内容,当用户选择一个选项时,该 selected 选项的值存储到 cat 中,因此当用户被重定向时 old( ) 函数从 cat.
中提取先前的值 {!!Form::open(['action'=>'CategoryController@storecat', 'method'=>'POST']) !!}
<div class="form-group">
<select name="cat" id="cat" class="form-control input-lg">
<option value="">Select App</option>
@foreach ($cats as $cat)
@if (old('cat')==$cat->id)
<option value={{$cat->id}} selected>{{ $cat->title }}</option>
@else
<option value={{$cat->id}} >{{ $cat->title }}</option>
@endif
@endforeach
</select>
</div>
<div class="from-group">
{{Form::label('name','Category name:')}}
{{Form::text('name','',['class'=>'form-control', 'placeholder'=>'Category name'])}}
</div>
<br>
{!!Form::submit('Submit', ['class'=>'btn btn-primary'])!!}
{!!Form::close()!!}
这对你有帮助,如果存在则与旧值进行比较,如果不存在则与默认值进行比较
<select name="select_name">
@foreach($options as $key => $text)
<option {{ ($key == old('select_name',$default))?'selected':'' }}> {{ $text }} </option>
@endforeach
</select>
$default
是从控制器注入到视图的值
<select style="width: 100%;" name="id_driver" id="id_driver" >
<option value="" @if (old('id_driver') == "") selected @endif>Select</option>
@foreach(\App\Driver::all() as $driver)
<option value="{{$driver->id}}" @if (old('id_driver') == $driver->id)
selected @endif >(#{{$driver->id}}) {{$driver->business_name}}
</option>
@endforeach
</select>
考虑到用户也想编辑他们之前的输入,
<select name="title">
@foreach ($titles as $key => $value)
<option value="{{$value->id}}" {{(old('title', $user->title_id) == $value->id ? 'selected' : '')}} > {{$value->name}} </option>
@endforeach
</select>
old('title', $user->title_id) returns 用户保存 title_id 第一次,如果验证失败它 returns 用户选择title_id。然后如果它与当前选项id匹配,则它被选中。
许多答案演示了使用三元运算符的一个衬里,但我认为使用 @if 更具可读性,至少对于初学者而言。如果没有 else 语句,以下内容就足够了。
<option value="{{ $key }}" @if(old('title')===$key) selected @endif>{{ $val }}</option>
Laravel 8.59.0 的简洁明了的用法示例(使用旧的预选编辑表单)
您可以将它用于您的编辑页面。它带有来自数据库的默认选择,如果您提交了未通过验证的表单,则会通过包含 old
.
<select name="brand_id">
@foreach ($brands as $brand)
<option value="{{ $brand->id }}" @if ($product->brand_id === $brand->id || old('brand_id') === $brand->id) selected @endif>{{ $brand->title }}</option>
@endforeach
</select>
通过错误验证实现改进 CodeToLife 的答案,如下所示
<div class="form-group row">
<label for="person-field" class="col-md-4 col-form-label text-right">First Person</label>
<div class="col-md-6">
<select id="person-field" class="custom-select select2 @error('person') is-invalid @enderror" name="person" required>
<option></option>
@foreach(\App\User::all() as $user)
<option value="{{$user->id}}" @if (old('person') == $user->id) selected @endif>{{$user->name}}
</option>
@endforeach
</select>
@error('person')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
Laravel 9 Checked / Selected / Disabled
<select name="version">
@foreach ($product->versions as $version)
<option value="{{ $version }}" @selected(old('version') == $version)>
{{ $version }}
</option>
@endforeach
</select>