首页 > 解决方案 > Laravel:如果手动输入路由/网址,则看不到 404

问题描述

构建一个 laravel 应用程序(博客/帖子)。在查看任何特定的帖子(通过 slug)时,网址是这样的

http://localhost:8000/post/corporate-world-1

所以如果有人放任何随机的蛞蝓,

http://localhost:8000/post/jajdajkjknjfna

它没有显示 404,而是像:

ErrorException (E_ERROR)
Trying to get property 'post_image' of non-object (View: C:\xampp\htdocs\blogsnposts\resources\views\post\show.blade.php)

标签: phplaravel

解决方案


这是因为您没有在控制器中处理 404。在没有看到控制器代码的情况下,我只能假设控制器尝试使用不存在的 slug 从数据库中获取内容,返回 null 但您仍然将从数据库中获取的对象传递给视图。您需要测试对象是否存在,如果不存在则返回 404。它看起来像这样

function post($slug) { 
       $post = Post::where('slug', $slug)->first();
       // This is probably missing
       if (!$post) {
           abort(404);
       }
       return view('show', ['post' => $post]);
}

推荐阅读