Laravel 8视图报Undefined variable: blogcat错误,代码无异常求解决
问题排查
共两处错误触发该报错:
- 控制器传参缺失:
addBlogCat方法处理GET请求时,直接返回admin.view_category视图,但未传递$blogcat变量,访问该方法对应路由时会直接抛出未定义变量错误。 - 视图循环变量重名:
@foreach($blogcat as $blogcat)写法会覆盖原集合变量,导致循环逻辑异常。
修复步骤
1. 调整控制器传参逻辑
修改addBlogCat方法,补充GET请求下的变量传递:
public function addBlogCat (Request $request){ if ($request->isMethod('post')) { $data = $request->all(); $blogcat = new Foliocategories; $blogcat->name = $data['category_name']; $blogcat->save(); return redirect ('/blog/categories'); } // 补充查询分类数据 $blogcat = DB::select('select * from foliocategories'); return view ('admin.view_category', ['blogcat' => $blogcat]); }
2. 修正视图循环变量名
修改foreach的单条记录变量,避免和集合重名:
@foreach($blogcat as $cat) <tr> <td>{{ $cat->id }}</td> <td>{{ $cat->name }}</td> <td>{{ $cat->created_at }}</td> <td><span class="badge badge-danger">Due</span></td> <td class="action h4"> <div class="table-action-buttons"> <a class="edit button button-box button-xs button-info" href="#"><i class="zmdi zmdi-edit"></i></a> <a class="delete button button-box button-xs button-danger" href="#"><i class="zmdi zmdi-delete"></i></a> </div> </td> </tr> @endforeach
可选优化
- 改用Eloquent查询更符合Laravel规范:将
DB::select('select * from foliocategories')替换为Foliocategories::all() - 给视图变量加默认值避免极端情况报错:
@foreach($blogcat ?? [] as $cat)
内容的提问来源于stack exchange,提问作者Joseph Barasa
相关产品推荐
相关产品推荐

