如何在 Laravel 表单中提交表单后保留所选选项的值
How to keep value of selected option after form is submitted in Laravel form
我想在用户按国家/地区在页面上搜索时进行刷新,例如。结果页面将选定的国家/地区保留在表单的选项中。
这就是我填充下拉列表的地方
@foreach ($countries as $country)
<option value="{!! $country->id !!}">{!! $country->name !!}</option>
@endforeach
这是我尝试过的方法,但似乎不正确,因为未选择该值
@foreach ($countries as $country)
<option value="{!! $country->id !!}" @if( old('country->id') == $country->id) selected="selected" @endif>{!! $country->name !!}</option>
@endforeach
这里有什么技巧?
这是控制器
public function search(Request $request)
{
$searchText = strip_tags($request['q']);
$seachLocation = strip_tags($request['l']);
$columns =['alias','description','address1','address2','address3'];
$query = Item::select('*');
$query->where( 'title', 'like', '%'.$searchText.'%');
foreach( $columns as $column) {
$query->orWhere( $column, 'like', '%'.$searchText.'%', '%'.$seachLocation.'%');
}
$query->orWhereHas('category',function( $query ) use ( $searchText ) {
$query->where('title', 'like', '%'.$searchText.'%' );
});
$query->orWhereHas('country',function( $query ) use ( $searchText ) {
$query->where('name', 'like', '%'.$searchText.'%' );
});
$items = $query->paginate(5);
$searchQuery = $searchText;
$searchQueryLoc = $seachLocation;
return view('search', compact('items','searchQuery','seachLocation'));
}
要使用 old()
助手,您的表单输入需要有一个名称。
然后使用输入的名称作为 old()
助手中的参数来获取旧值。
所以像old('country->id')
那样使用它是行不通的;你需要使用 old('nameAttributeOfInput')
.
假设此输入的 name
属性的完整示例是 country_id
:
@foreach ($countries as $country)
<option value="{!! $country->id !!}" @if( old('country_id') == $country->id) selected="selected" @endif>{!! $country->name !!}</option>
@endforeach
作为旁注,请注意 {!! !!}
不会转义放置在页面上的值,这可能存在潜在危险。使用转义值的 {{ }}
可能同样好,更安全。
我建议你使用session来存储选择的国家。例如:
session()->put('forms.country', $request->get('country'));
那么你的html应该变成:
<option value="{{ $country->id }}" @if( session('forms.country') == $country->id) selected="selected" @endif>{{ $country->name }}</option>
您可以在表单字段中使用 Laravel 内置的 old() 来保存提供的值。
@if( old('field_name') == $country->id) selected="selected" @endif
我想在用户按国家/地区在页面上搜索时进行刷新,例如。结果页面将选定的国家/地区保留在表单的选项中。
这就是我填充下拉列表的地方
@foreach ($countries as $country)
<option value="{!! $country->id !!}">{!! $country->name !!}</option>
@endforeach
这是我尝试过的方法,但似乎不正确,因为未选择该值
@foreach ($countries as $country)
<option value="{!! $country->id !!}" @if( old('country->id') == $country->id) selected="selected" @endif>{!! $country->name !!}</option>
@endforeach
这里有什么技巧?
这是控制器
public function search(Request $request)
{
$searchText = strip_tags($request['q']);
$seachLocation = strip_tags($request['l']);
$columns =['alias','description','address1','address2','address3'];
$query = Item::select('*');
$query->where( 'title', 'like', '%'.$searchText.'%');
foreach( $columns as $column) {
$query->orWhere( $column, 'like', '%'.$searchText.'%', '%'.$seachLocation.'%');
}
$query->orWhereHas('category',function( $query ) use ( $searchText ) {
$query->where('title', 'like', '%'.$searchText.'%' );
});
$query->orWhereHas('country',function( $query ) use ( $searchText ) {
$query->where('name', 'like', '%'.$searchText.'%' );
});
$items = $query->paginate(5);
$searchQuery = $searchText;
$searchQueryLoc = $seachLocation;
return view('search', compact('items','searchQuery','seachLocation'));
}
要使用 old()
助手,您的表单输入需要有一个名称。
然后使用输入的名称作为 old()
助手中的参数来获取旧值。
所以像old('country->id')
那样使用它是行不通的;你需要使用 old('nameAttributeOfInput')
.
假设此输入的 name
属性的完整示例是 country_id
:
@foreach ($countries as $country)
<option value="{!! $country->id !!}" @if( old('country_id') == $country->id) selected="selected" @endif>{!! $country->name !!}</option>
@endforeach
作为旁注,请注意 {!! !!}
不会转义放置在页面上的值,这可能存在潜在危险。使用转义值的 {{ }}
可能同样好,更安全。
我建议你使用session来存储选择的国家。例如:
session()->put('forms.country', $request->get('country'));
那么你的html应该变成:
<option value="{{ $country->id }}" @if( session('forms.country') == $country->id) selected="selected" @endif>{{ $country->name }}</option>
您可以在表单字段中使用 Laravel 内置的 old() 来保存提供的值。
@if( old('field_name') == $country->id) selected="selected" @endif