【问题标题】:Laravel: Can't see 404 if route/url entered manuallyLaravel:如果手动输入路由/网址,则看不到 404
【发布时间】:2018-06-28 23:52:26
【问题描述】:

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

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

所以,如果有人放了任何随机的 slug,

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)

【问题讨论】:

  • 向我们展示控制器和show.blade.php 代码。

标签: php laravel


【解决方案1】:

这是因为您没有在控制器中处理 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]);
}

【讨论】:

  • 真的非常感谢!作为一个新手,错过了这个愚蠢的事情!
  • 您将需要与编辑页面完全相同的代码,因此您应该使用中间件解决方案以避免重复代码。 @RaviWadhwani
  • 好的。非常感谢@Tiago_nes,我会记住您的建议并使用中间件:)
  • 完成! @Tiago_nes
【解决方案2】:

您可以在路由中添加中间件。

Route::get('post/{post}', PostController@show)->middleware('checkPost');

在kernel.php中

'checkPost' => \Illuminate\Routing\Middleware\CheckPostMiddleware::class,

在中间件中检查 url 是否包含有效的帖子

return abort(404);

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2015-06-22
    • 2020-03-26
    • 1970-01-01
    • 2013-08-12
    • 2021-11-17
    • 2020-02-04
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多