【问题标题】:404 page not working for some routes in laravel 5.4404 页面不适用于 laravel 5.4 中的某些路由
【发布时间】:2018-01-04 16:33:39
【问题描述】:

我有这样的路线:

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 页面,所以它按预期工作。

有什么建议吗?

【问题讨论】:

  • 对不起,我没有得到你。

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


【解决方案1】:

Eloquent 有一个简洁的 firstOrFail 方法,它要么返回它找到的第一个实体,要么如果没有,则抛出一个 ModelNotFoundException,laravel 将其转换为 404 页面。

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

【讨论】:

  • $post = Post::where('slug', $slug)->first();first() 更改为firstOrFail() 解决了我的问题之前,我正在使用它。谢谢。我会在 3 分钟内将您的回答标记为已接受。
【解决方案2】:

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

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

【讨论】:

  • 我正在将多个变量从数组传递给视图,我已经更新了问题中的代码。
  • @Saurabh 确保根据更新后的问题定义 $var 和 $var2
  • @Saurabh:我的回答也是根据您的问题代码中的错误给出的。现在你用 ')' 更新了它。
  • 是的,这是我的问题中的一个错字。
  • 感谢您的帮助,但@tkausl 的方法对我有用。此外,它是更优雅的解决方案。
猜你喜欢
  • 2018-09-22
  • 2021-10-14
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2015-02-18
  • 2016-10-20
相关资源
最近更新 更多