如果用户访问ID不存在的会议,将其重定向到特定页面

时间:2018-06-29 13:14:48

标签: php laravel

我有这条路线:

Route::get('conference/admin/{id}', 
[ 'uses' => 'ConferenceController@admin', 
'as'=>'conference.admin']);

因此,当用户访问“ http://proj.test/conference/manage/1”时,将访问会议管理区域的页面主页。

但是,如果如果用户访问“ http://proj.test/conference/admin/1”而删除了此特定会议,则会显示一个带有以下消息的页面:

对不起,找不到您要查找的页面。

但是,如果会议不存在并且用户访问“ http://proj.test/conference/admin/1”,应该发生的是将用户重定向到首页('/')。

你知道如何实现吗?

我已经在AuthServiceProvider中包含以下代码,以仅允许作为会议创建者的用户访问该会议的管理区域。我不知道这是否还可以用于将用户重定向到('/')如果他要求召开不存在的会议。

//身份验证服务提供商门

 public function boot(GateContract $gate)
    {
        $this->registerPolicies();

        $gate->define('access-management-area', function($user, $conference)
        {
            return $user->id == $conference->organizer_id;
        });
    }

然后在admin()中使用该门:

   public function admin($id){
        $conference = Conference::findOrFail($id);
        if(Gate::allows('access-management-area', $conference)) {
            return view('conference.admin')->with('conference',$conference);
        } else {
            return redirect('/');
        }
    }

1 个答案:

答案 0 :(得分:0)

您正在执行findOrFail查找,当它失败查找记录时,它将始终返回404。

您可以执行以下操作:

 public function admin($id){
    $conference = Conference::find($id);

    if(!$conference){
      return redirect('/');
    }

    if(Gate::allows('access-management-area', $conference)) {
        return view('conference.admin')->with('conference',$conference);
    } 
    else{
        abort(403);
    }
 }