2016-12-07 41 views
0

OK ...だから私はこのエラーをSOとGoogleで検索しましたが、私の奇妙な状況に関連しないすべての答えを見つけました。異なる "foreach()"引数に無効な引数が指定されました

地元の買い物リスト/価格確認アプリとして使用するための最初の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) 

は私のデータベース内のすべてのストアを含むコレクションを生成するため、は空ではありません。

私はこのコードとddの結果を予想通りに動作する他のアプリと比較しましたが、まったく同じです。私も@forelseを試しました。

これに影響するLaravel 5.3の変更点はありますか?私は何かが欠けていたか?

+0

[FormBuilder](https://github.com/laravel/framework/tree/4.2/src/Illuminate/Html)のみがlaravel 4に見つかりました。プロジェクトをどのようにアップグレードしましたか?むしろ、ブレード全体と違反コード(FormBuilder 560〜565行)のスニペットを投稿することができます。 –

+0

私はフォームにLaravelCollectiveを使用しています。これはFormbuilder.phpを提供します。 – Stretsh

+1

あなたのご意見は正しい方向に私を指摘しています。行560の周りに、このファイルは 'foreach'文を含むselect入力を処理します。私は間違った声明を見ていました。私はLaravelCollectiveによって提供されたフォームファサードを使用して行われた別の 'select'入力を持っています。オプションとして' null'を使用しましたが、もちろんこのエラーを生成していました。これを指摘してくれてありがとう。多分私はそれを受け入れることができる答えとして? – Stretsh

答えて

0

前に追加する必要があり、空の配列array()

があると思い、@のバグース - テサによってコメントのおかげで、問題の男を発見しました。

エラーメッセージで参照されているFormbuilder.phpはLaravelCollective Form & HTML(「コアフレームワークから削除されたLaravelコンポーネントを維持しています)」というメッセージが表示され、そのファイルの561行目が表示されます。選択入力を作成するために使用されるforeachステートメントがありました。これにより、私のフォームに別の選択リストがあることが分かりました。そこで私はそれを見ました。

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

第二引数はforeachループでFormbuilderによって処理されたリストのためのオプションの配列を、保持する必要があります!

だから私はちょうど間違って見てforeachループを見て過ごした!

0

すべてうまく見えます。私は条件場合は、ループすなわち

@if(!empty($stores)) 
@foreach ($stores as $store) 
    <option value="{{ $store->id }}">{{ $store->name }} - {{ $store->address }}  </option> 
@endforeach 
@endif 
+0

'dd'コマンドは、変数が空ではないことをすでに証明しています。投稿を編集して、私も '@ forelse'を試みたと言いました。 – Stretsh

関連する問題