第一次重定向后不显示laravel错误消息

时间:2019-05-09 11:58:15

标签: php laravel validation redirect

如果传入的请求参数未通过给定的验证规则,则将用户重定向回上一页。 即使会话中存在验证错误消息,也不会在首次重定向后显示它们。 当我再次刷新页面时,将显示错误消息。

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">&times;</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,所以发生错误,会话中存在错误消息,但不是没有显示!

image first

在第二张图片中,我更正了参数perpage并刷新了页面,现在显示错误!

valida


我意识到redirect无效。 验证失败时,重定向将不起作用! 为什么会发生? 我的路线规则是:

Route::namespace('Admin')->prefix('admin')->group(function(){

    Route::get('musics','MusicsController@index');

});

我将return back()更改为return redirect()->back() and return Redirection::back(),但是无效!
怎么了?
关键是我使用一页(我的意思是不像插入动作,我有两种方法,创建方法和存储方法,我不想将表单提交到中间页然后返回)。

1 个答案:

答案 0 :(得分:0)

尝试

return Redirect::back()
->withErrors($validator)
->withInput();