今回はこんな要望にお答えしていきます。
Laravelでコントローラー側からview側にデータを送る方法
結論から話すと、以下のような感じでOKです。
return view('viewファイル', compact('データ'));
もう少し詳しく解説します。
例:$dataというデータをindexというviewに渡したい時
$dataをuserフォルダ配下のindexというviewファイルに渡したい時は以下のような感じでOKです。
return view('user.index', compact('data'));
これでview側で、$dataという変数が使用可能です。
基本はこの形でOKです。
Attempt to read property "データ名" on string というエラーが出た場合
viewファイルに渡そうとしたときに、たまに「Attempt to read property "ホゲホゲ" on string 」というエラーが出るときがあります。
解決方法を紹介します。
解決策:取得しているデータの型を確認しましょう
配列じゃないのに、foreachで回してプロパティにアクセスしようとしたりするとこのようなエラーが出ます。
例えば以下のような感じですかね。
@foreach ($query_data as $data) //そもそも$query_dataが配列じゃない
{{ $data }}
@endforeach
いったんコントローラー側で「var_dump($query_data)」とかして、変数の型をチェックしてみてください。
Cannot use object of type stdClass as arrayと出た場合
Cannot use object of type stdClass as arrayというエラーは、そのエラーの表記通り、「stdClassを間違えて配列扱いしてしまっている」ことが原因です。
例えば、以下の場合、$query_dataがstdClassだとエラーが出ます。
@php
echo($query_data['name']);
@endphp
解決策を紹介します。
解決策:アクセス方法を変更しましょう
結論から話すと、stdClassの値が欲しい場合は、「->」でプロパティにアクセスすればOKです。
以下のような感じですね。
@php
echo($query_data->name);
@endphp
// {{ $query_data->name }}でもOK
//laravelは{{}}(マスタッシュ)で変数展開できます★
上記ならうまくいくはずです。
ということで、今回はlaravelにおいてコントローラーからviewにわたす方法を紹介しつつ、よくあるエラーも紹介しました。
「データは渡せているのに、view側の記述がおかしくてエラーが出てしまう」というのはあるあるです。
初心者の方の場合だと、混乱しちゃいがちですが、冷静になって考えれば原因もわかるはずです。
この記事が解決の糸口になれば幸いです。