Laravel:抓住所有不存在的页面

时间:2018-04-29 13:34:17

标签: sql laravel postgresql laravel-5 eloquent

我想为所有不存在的页面制作一个404页面。 例如,我有这个代码

public function category($category)
    {
        $category = Category::find($category);
        if($category === null) return abort(404); // return 404 page with 404 header status error
        return view('pages.category', compact('category'));
    }

我的路线档案

Route::get('/category/{category}', 'CategoryController@category');

我还有其他组件,如子类别,文章,评论等。首先,我可以输入 app / category / 1234
如果我的应用在类别表中没有id = 1234的类别,那么不检查变量=== null 我可以获得默认但空的页面,它将具有200 http状态。这不正常。

我可以检查所有组件中的 null ,但我认为这不正确。

还有一个关于SQL错误的问题。 “id”字段有整数类型,如果我在浏览器中转到 app / category / 1sdsds ,我会得到

  

SQLSTATE [22P02]:无效的文本表示:7错误:整数的输入语法无效

我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:0)

让Laravel知道你只接受整数

Route::get('/category/{category}', 'CategoryController@category')->where('category', '[0-9]+');

对于控制器

public function category(Category $category){...}

如果没有找到它应该返回404页面。您不需要另外检查,也不需要分配$ category,它已经被分配。

另一种方式是

public function category($category){
    $category = Category::firstOrFail($category);
}