我正在尝试创建一个搜索表单,用户必须从一些下拉菜单中选择并在几个字段之一中输入文本。问题是我正在重新显示搜索页面,其结果低于它。要做到这一点,我不是重定向,我只是返回一个视图,其中包含我需要压缩的数据集。
有没有办法检索输入类似于在验证失败后重定向时输入:: old('x')的方式?
路线是:
Route::get('search', ['as' => 'main.search.get', 'uses' => 'MainController@showSearchPage']);
Route::post('search', ['as' => 'main.search.post', 'uses' => 'MainController@showSearchResults']);
我在视图中的代码示例:
{!! Form::open(array('route' => 'main.search.post', 'class' => 'form-inline align-form-center', 'role' => 'form')) !!}
<div class="form-group">
{!! Form::label('product_code', 'Product Code: ',['class' => 'control-label label-top']) !!}
{!! Form::text('product_code', Input::old('product_code'), ['class' => 'form-control input-sm']) !!}
</div>
因此,当您提交搜索时,它会调用showSearchResults,如果成功则返回视图,如果通过我的SearchRequest类验证失败,则会将其重定向到main.search.get路由,打印错误并返回输入田野。
我已经做了很多搜索,并且或多或少是空手而归,如果有一种方式可以说 - &gt; withInput()在返回视图(不是重定向)或其他东西时会很好。
目前我唯一的解决方案是输入:: flash(),但由于我没有重定向该数据,因此需要额外刷新。在这一点上,这不是一个非常大的交易,但我想知道是否有其他人有更好的解决方案。
编辑 - 从控制器返回视图的下面的代码:
...
Input::flash();
return view('main.search', compact('results', 'platformList', 'versionList', 'customerList', 'currencyList', 'customer', 'currency'));
}
谢谢
答案 0 :(得分:0)
我遇到了同样的问题。对我有用的解决方案是将以下行添加到控制器中。
session(['_old_input' => $request->input()]);
现在我将解释它是如何运作的。
在视图中,调用全局函数 old():
<input type="username" id="username" class="form-control" name="username" value="{{ old('username') }}" placeholder="Username" autofocus>
此功能位于 vendor / laravel / framework / src / Illuminate / Foundation / helpers.php
function old($key = null, $default = null)
{
return app('request')->old($key, $default);
}
这会调用 Illuminate \ Http \ Request-&gt; old():
public function old($key = null, $default = null)
{
return $this->session()->getOldInput($key, $default);
}
哪些调用 Illuminate \ Session \ Store-&gt; getOldInput():
public function getOldInput($key = null, $default = null)
{
$input = $this->get('_old_input', []);
return Arr::get($input, $key, $default);
}
此调用正在会话中查找 _old_input 。因此,解决方案是使用此值将输入添加到会话。
希望这有帮助。
答案 1 :(得分:0)
由于发布请求,您可以使用request
代替old
change {{old('product_code')}} to {{request('product_code')}}