一个不同的“为foreach()提供的无效参数”问题

时间:2016-12-07 01:30:43

标签: php foreach laravel-5.3

好的......所以......我在搜索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中是否有任何可能影响这一点的变化?我错过了什么吗?

2 个答案:

答案 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的评论,发现问题的人。

错误消息中提到的F​​ormbuilder.php是LaravelCollective Form & HTML(&#34;我们维护已从核心框架中删除的Laravel组件&#34;),这让我看看第561行那个文件。有一个foreach语句,用于构建选择输入。这让我意识到我的表单中有另一个选择列表,所以我看了一下。

{!! Form::select('category_id', null, null, array('class' => 'form-control')) !!}

第二个参数应该包含列表的一个选项数组,由Formbuilder使用foreach循环处理!

所以...我只花了几个小时看错了foreach循环!