好的......所以......我在搜索SO和Google时遇到了这个错误,但我找到的所有答案与我的奇怪情况无关。
我刚安装了我的第一个Laravel 5.3应用程序(之前使用5.2)用作本地购物清单/价格检查应用程序。
尝试制作表格:
ProductController的:
$stores = Store::get();
return view('product.add', [
'stores' => $stores,
]);
add.blade:
<select name="store_id" id="store_id">
@foreach ($stores as $store)
<option value="{{ $store->id }}">{{ $store->name }} - {{ $store->address }}</option>
@endforeach
</select>
这会导致以下错误:
ErrorException in FormBuilder.php line 561:
Invalid argument supplied for foreach() (View: E:\wamp\www\shopping\resources\views\product\add.blade.php)
$stores
不为空,因为dd($stores)
会生成一个包含数据库中所有商店的集合。
我将此代码和dd
结果与我的其他应用程序进行了比较,这些应用程序按预期工作,完全相同。我甚至试过@forelse
。
Laravel 5.3中是否有任何可能影响这一点的变化?我错过了什么吗?
答案 0 :(得分:0)
一切都很好看。我认为有一个空数组Array()
你必须在循环之前添加if条件,即
@if(!empty($stores))
@foreach ($stores as $store)
<option value="{{ $store->id }}">{{ $store->name }} - {{ $store->address }} </option>
@endforeach
@endif
答案 1 :(得分:0)
由于@ bagus-tesa的评论,发现问题的人。
错误消息中提到的Formbuilder.php是LaravelCollective Form & HTML(&#34;我们维护已从核心框架中删除的Laravel组件&#34;),这让我看看第561行那个文件。有一个foreach
语句,用于构建选择输入。这让我意识到我的表单中有另一个选择列表,所以我看了一下。
{!! Form::select('category_id', null, null, array('class' => 'form-control')) !!}
第二个参数应该包含列表的一个选项数组,由Formbuilder使用foreach
循环处理!
所以...我只花了几个小时看错了foreach
循环!