如何在 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