我有一个PageController,它显示页面的内容,但首先我需要检查,输入的网址是否存在,只有在这种情况下我才会显示页面。
不幸的是,如果搜索到的页面不存在,则会抛出异常:
NotFoundHttpException in Handler.php line 103:
No query results for model [App\Models\PageTranslation].
这是我的代码,我试图重定向,如果没有找到错误404,但它仍然给我NotFoundHttpException。
public function show($page) {
$lang = Lang::getLocale();
$page = $this->page_translation->where('slug', '=', $page)->where('lang', '=', $lang)->firstOrFail();
if(!$page) {
App::abort(404);
}
return view('front.page.show', compact('page'));
}
如何在这种情况下将用户重定向到错误404页面?
答案 0 :(得分:1)
使用first()
代替firstOrFail()
。如果没有匹配的数据,firstOrFail()
会立即失败(抛出404),并且不会通过其他代码,而first()
会返回null
。
答案 1 :(得分:0)
我会捕获异常,然后重定向:
public function show($page) {
$lang = Lang::getLocale();
try{
$page = $this->page_translation->where('slug', '=', $page)->where('lang', '=', $lang)->firstOrFail();
} catch (\NotFoundHttpException $e) {
//maybe log the error for debugging purposes
App::abort(404);
}
return view('front.page.show', compact('page'));
}