Laravel:没有模型的查询结果

时间:2016-10-12 12:35:00

标签: php exception-handling laravel-5.2

我有一个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页面?

2 个答案:

答案 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'));
    }