Laravel报错:Attempt to read property "title" on null 排查求助
Laravel详情页报错:Attempt to read property "title" on null 排查方案
核心原因
报错本质是视图中调用$blog->title时,$blog为null,说明控制器未从数据库查询到对应ID的博客数据。
具体排查与解决步骤
1. 处理查询无数据的情况
当前控制器用first()查询,当数据库不存在对应ID的记录时,会返回null并传递到视图,触发报错。将查询语句改为firstOrFail(),找不到数据时Laravel自动返回404页面,避免空值流入视图:
public function show($id) { $blog = Blog::where('id',$id)->firstOrFail(); return view('front.detail',compact('blog')); }
2. 优化路由与控制器参数匹配
使用Laravel路由模型绑定简化代码,同时自动处理无数据场景:
- 控制器方法直接接收
Blog模型实例作为参数,无需手动查询:
public function show(Blog $blog) { return view('front.detail',compact('blog')); }
- 现有路由无需修改(resource路由的
show方法默认参数为{blog},与模型名单数一致,Laravel会自动根据ID匹配对应模型)。
3. 验证请求URL与参数
确认访问详情页的URL格式正确,应为/{lang}/blogs/{id}(例如/en/blogs/1),确保{id}是数据库中存在的博客ID。若URL参数错误(如传递非数字或不存在的ID),会直接导致查询无结果。
4. 视图层增加容错处理(可选)
若需要在无数据时显示友好提示而非404,可在视图中添加判断:
<li> @if($blog) <h2><a href="">{{$blog->title}}</a></h2> <p>{!! $blog->text !!}</p> @else <p>该博客不存在或已被删除</p> @endif </li>
内容的提问来源于stack exchange,提问作者Emachintag
相关产品推荐
相关产品推荐

