如果传入的请求参数未通过给定的验证规则,则将用户重定向回上一页。 即使会话中存在验证错误消息,也不会在首次重定向后显示它们。 当我再次刷新页面时,将显示错误消息。
Blade
@if ($errors->any())
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endif
Controller
public function index()
{
$this->validation();
$perpage = request()->input('perpage',10);
$perpage = $perpage<10 ? 10 : $perpage;
$musics = Music::where('title','like','%'.request()->input('title').'%')->paginate($perpage);
$page = request()->input('page',1);
$page_count = intval(ceil($musics->total()/$perpage));
if($page < 1 || (!empty($page_count) && $page > $page_count)){
return redirect(request()->fullUrlWithQuery(['page' => 1]));
}
return view('admin.musics.index',
[
'musics'=>$musics,
'perpage'=>$perpage,
'page'=>$page,
'page_count'=>$page_count
]);
}
private function validation()
{
$validator = Validator::make(request()->all(), [
'title' => 'nullable|max:255',
'page' => 'numeric|min:1',
'perpage' => 'numeric|min:10|in:10,20,30,50,100,200,300,500,1000'
]);
if ($validator->fails()) {
return back()
->withErrors($validator)
->withInput();
}
}
例如,在第一个图像中,如您所见,参数perpage
应该是数字10、20、30、50、100、200、300、500、1000中的一个,所以它是22,所以发生错误,会话中存在错误消息,但不是没有显示!
在第二张图片中,我更正了参数perpage
并刷新了页面,现在显示错误!
我意识到redirect
无效。
验证失败时,重定向将不起作用!
为什么会发生?
我的路线规则是:
Route::namespace('Admin')->prefix('admin')->group(function(){
Route::get('musics','MusicsController@index');
});
我将return back()
更改为return redirect()->back() and return Redirection::back()
,但是无效!
怎么了?
关键是我使用一页(我的意思是不像插入动作,我有两种方法,创建方法和存储方法,我不想将表单提交到中间页然后返回)。
答案 0 :(得分:0)
尝试
return Redirect::back()
->withErrors($validator)
->withInput();