在Laravel中能否多次使用同一个传递给Blade模板的参数?
问题根源
报错的核心原因是foreach循环的变量命名冲突,你把遍历的数据源变量和单次迭代的临时变量都命名为了$list:
@foreach($list as $list)
第一次执行这个循环时,PHP会不断把集合中的元素赋值给左侧的$list变量,循环结束后原来保存整个饮料集合的$list变量会被覆盖为循环最后一次的迭代值,也就是布尔值false(PHP的foreach迭代结束后会将临时变量赋值为false)。当你第二次复用这段代码块时,实际遍历的数据源已经变成了布尔值false,自然无法读取id属性。
解决方法
把foreach的临时迭代变量改成和数据源不同的名称即可,比如改成$item:
<div class="col"> <select name="beverage9" id="beverage9"> <option value="">Choose your 9 o'clock beverage</option> @foreach($list as $item) <option value="{{$item->id}}">{{$item->beverage_name}}</option> @endforeach </select> </div>
修改后无论你复用多少次这段代码块,都不会覆盖原来的$list集合变量,报错就会消失。
可选优化建议
如果需要在页面生成多个不同时间点的饮料选择框,还可以把这段选择框代码封装为Blade组件,传入不同的name、id参数即可批量生成,不需要重复复制粘贴代码:
- 新建Blade组件
resources/views/components/beverage-select.blade.php:
<div class="col"> <select name="{{$name}}" id="{{$id}}"> <option value="">Choose your {{$time}} o'clock beverage</option> @foreach($list as $item) <option value="{{$item->id}}" @selected(old($name) == $item->id)>{{$item->beverage_name}}</option> @endforeach </select> </div>
- 页面中直接调用即可:
<x-beverage-select name="beverage9" id="beverage9" time="9" :list="$list" /> <x-beverage-select name="beverage10" id="beverage10" time="10" :list="$list" />
内容的提问来源于stack exchange,提问作者user16438868
相关产品推荐
相关产品推荐

