如何在Laravel表单中提交表单后保留所选选项的值

时间:2017-10-12 08:47:25

标签: php laravel laravel-5.2

我想在用户按页面刷新时刷新,例如。结果页面将所选国家/地区保留在表单上的选项中。

这就是我填充下拉列表的地方

@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'));
}

3 个答案:

答案 0 :(得分:3)

要使用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

作为旁注,请注意{!! !!}不会逃避页面上可能存在潜在危险的值。使用{{ }}来逃避价值可能会更好,也更安全。

答案 1 :(得分:1)

I would suggest that you use session to store the selected country. For example:

session()->put('forms.country', $request->get('country'));

Then your html should become:

<option value="{{ $country->id }}"  @if( session('forms.country')  == $country->id) selected="selected" @endif>{{ $country->name }}</option>

答案 2 :(得分:0)

您可以在表单的字段中使用Laravel内置的old()来保存提供的值。

 @if( old('field_name') == $country->id) selected="selected" @endif