You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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参数即可批量生成,不需要重复复制粘贴代码:

  1. 新建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>
  1. 页面中直接调用即可:
<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 02:42:01