php - 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)
解决方案
这是因为您没有在控制器中处理 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]);
}
推荐阅读
- amazon-web-services - AWS Secret Manager 最佳实践
- sql - SQL oracle:如何获得添加和减去 4 个选择语句的结果以使用“WITH”关键字获得一个值
- python - 从 html 中的 wtforms 从 SelectField 中获取数据
- r - 捕获用于 S3 调度的参数表达式
- p5.js - p5.Graphics 的 saveFrames()
- javascript - 获取数组中动态生成的表单数据
- optimization - 如何加快我的近似自然对数函数?
- html - 在引导程序 3.3 和 jquery 1.1 中单击后,折叠按钮显示但不起作用
- ffmpeg - 在 anaconda 中安装包时出错:尝试为未知包类型制作前缀记录
- kubernetes - 如何在转发到认证服务器之前过滤认证请求?