Laravel向Blade视图传递多份API返回数据时访问报错如何解决?
错误原因
- 初始传参写法错误:Laravel 的
view()方法仅支持第二个参数传入完整的视图数据数组,后续传入的$department、$company参数会被自动忽略,因此拿不到company数据。 - 改用
compact后遍历逻辑错误:你定义的$company['companyList']本身已经是API返回的公司列表二维数组,第一层foreach遍历得到的$com就是单条公司数据,你额外加了第二层foreach遍历单条公司的字段值,此时$comp是字符串/数字类型的字段值,自然无法用company_id索引取值。
解决方法
方案1(更简洁,推荐):合并数组传参
传参时直接把三个数组合并为一个传入,视图中可以直接访问三个键名对应的变量:
// 控制器传参代码 $data['dataList'] = Http::get(Config::get('apis.section.readAll'))->json(); $company['companyList'] = Http::get(Config::get('apis.company.readAll'))->json(); $department['departmentList'] = Http::get(Config::get('apis.department.readAll'))->json(); return view('section.section', array_merge($data, $department, $company));
对应视图遍历代码,直接遍历$companyList即可,不需要多余嵌套:
@foreach($companyList as $comp) <option value="{{ $comp['company_id'] }}">{{ $comp['comp_name'] }}</option> @endforeach
方案2:保留compact传参,修正遍历逻辑
如果要保留现有compact传参的写法,只需要去掉视图中多余的一层foreach即可:
@foreach($company['companyList'] as $comp) <option value="{{ $comp['company_id'] }}">{{ $comp['comp_name'] }}</option> @endforeach
排查技巧
如果后续遇到类似变量结构不清晰的问题,可以在视图中用dd($company['companyList'])打印变量结构,就能快速确认遍历层级是否正确。
内容的提问来源于stack exchange,提问作者Ashiq Fardus
相关产品推荐
相关产品推荐

