我有这条路线:
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('/');
}
}
答案 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);
}
}