404页面不适用于laravel 5.4中的某些路线

时间:2017-07-28 14:42:12

标签: php laravel http-status-code-404 laravel-5.4

我有这样的路线:

web.php

Route::get('post/{slug}', [
    'as'   => 'post.single',
    'uses' => 'PageController@getSingle',
]);

PageController.php

public function getSingle($slug)
{
    //some db stuff and returning an array to view
    return view('single', array('var1' => $var, 'var2' => $var2));
}

帖子有一个存储在数据库中的slug。 如果帖子中存在slug,例如:first-post 然后路由mysite.com/post/first-post按预期工作。 但如果帖子不存在,例如:second-post 然后路线mysite.com/post/second-post给我一个错误:

**ErrorException**
Trying to get property of non-object

我希望它显示404错误页面(已配置404页面) mysite.com/hellohello给出了404页面,因此它按预期工作。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

Eloquent有一个简洁的firstOrFail方法,它返回它找到的第一个实体,或者如果没有,则抛出一个模型转换为404页面的ModelNotFoundException。

public function getSingle($slug)
{
    $var = YourModel::where('slug', $slug)->firstOrFail();
    return view('single', compact('var'));
}

答案 1 :(得分:0)

我认为你应该更新你的功能: 并且你不能在返回视图中关闭括号

public function getSingle($slug)
{

    //some db stuff and returning an array to view
    return view('single', array('var' => $var));
}

OP更改问题内容后更新

public function getSingle($slug)
{
    //some db stuff and returning an array to view
    $var = SOMEDBRESULT1;
    $var2 = SOMEDBRESULT2;
    return view('single', array('var1' => $var, 'var2' => $var2));
}

您可以通过laravel 5.4了解如何使用db get first record