Laravel Blade模板同一页面二次遍历产品集合报非对象属性读取错误
报错原因
- 核心问题是foreach循环变量重名导致原始集合被覆盖:控制器传递到视图的
$product是全部产品的集合,你第一个循环写的是@foreach($product as $product),遍历过程中会不断把当前的单个产品实例赋值给和集合同名的$product变量。第一次循环结束后,$product已经不再是原本的产品集合,而是最后一条产品的单条实例(如果产品集合为空则为null)。 - 第二次循环尝试遍历已经被覆盖为单条实例/ null的
$product变量,无法正常遍历,访问属性时就会抛出「Trying to get property 'name' of non-object」报错。
修复方案
1. 调整控制器代码,遵循集合用复数的命名规范,避免重名
public function index(){ // 产品集合变量改为复数$products $products = product::get(); return view ('pages.verkoop', [ 'products' => $products ]); }
2. 修改Blade视图中两处foreach的遍历逻辑,遍历集合变量$products,单条实例用$product
第一处产品展示循环修改为:
<div class="nieuws2"> @foreach($products as $product) <div class="nieuwsber bericht{{$product->id}}"> <h2>{{$product->name}}</h2> <img src="{{$product->image}}"> <span>€{{$product->price}}</span> </div> @endforeach </div>
第二处表单产品选项循环修改为:
<form class="saleform" method="post" action="sale"> <h2>Plaats je bestelling</h2> @csrf <label for="name">Naam (voornaam + achternaam)</label><br> <input type="text" id="name" name="name"><br><br> <label for="adres">adres (straat + nr + postcode + gemeente)</label><br> <input type="text" id="adres" name="adres"><br><br> @foreach ($products as $product) <label for="{{$product->name}}">{{$product->name}}</label><br> <input type="number" id="{{$product->name}}" name="{{$product->name}}" value="0"><br><br> <input type="hidden" id="price" name="price" value="{{$product->price}}"> @endforeach <input type="submit"> </form>
内容的提问来源于stack exchange,提问作者ruben Maesfranckx
相关产品推荐
相关产品推荐

