Laravel 10变量传递失败:Undefined variable $item问题求助
问题排查与解决:Laravel 10「Undefined variable $item」错误
核心原因
这个错误的本质是渲染目标Blade视图时,$item变量未被正确传入视图上下文,要么是变量生成失败,要么是传递链路断裂。结合你的代码,从以下几个方向逐一排查:
1. 先确认会话变量是否有效
不管你用的是current_school_id还是find_school_id,先在控制器方法开头加调试代码,确认会话里确实有这个值:
dd(session()->all());
如果会话里找不到对应ID,那后续查询$item必然为空,甚至根本生成不了$item变量,直接导致视图报错。
2. 修正控制器变量传递的核心问题
注意你的路由school.assessment.year绑定的是showStudentAssessmentYear方法,但你最初写的someMethodName根本不是这个路由对应的方法——也就是说,你之前在someMethodName里传递$item的操作,和当前报错的视图完全无关!
正确的做法是,在路由对应的控制器方法里生成并传递$item,而且直接用路由参数更可靠,不用依赖会话:
public function showStudentAssessmentYear($schoolId) { // 直接使用路由参数中的schoolId查询模型 $item = EduvantageSchools::find($schoolId); // 校验模型是否存在,避免空变量传递 if (!$item) { abort(404, 'School not found.'); } // 把变量传递到视图 return view('schoolview.profile.student_assessment_year', compact('item', 'schoolId')); }
3. 优化Blade按钮的路由生成逻辑
如果暂时不想依赖$item,可以直接用会话ID生成路由,跳过变量依赖:
<button type="button" class="btn btn-secondary" onclick="window.location.href='{{ route('school.assessment.year', ['schoolId' => session('current_school_id')]) }}'">Year 1</button>
当然,如果已经确保控制器把$item正确传到视图,原代码也可以正常工作。
4. 废弃AppServiceProvider的绑定方案
在AppServiceProvider的boot方法里直接操作会话是不可靠的——Laravel服务提供者的启动时机早于会话初始化,此时session('find_school_id')大概率取不到值,这种绑定方式本身就有逻辑问题,直接废弃即可。
最终验证步骤
- 访问路由时,确认
{schoolId}参数能正常传递到控制器方法 - 控制器内查询
EduvantageSchools模型,确保返回有效数据 - 用
compact('item')将变量传递到目标视图 - 测试Blade按钮的路由生成是否正常
内容的提问来源于stack exchange,提问作者Orlando
相关产品推荐
相关产品推荐

