LaravelでControllerからViewに値を渡す方法

2020年5月13日

こんにちは、はるまきです。今回は「自作Webサービス解説シリーズ」です。今回で第2回目! 

自作Webサービスのアクアリウム専門の質問サイト→ Q&Aquarium

このシリーズでは、初学者の僕が学んだことや、ハマったポイントなどを紹介しています。間違っている箇所があればご指摘お願いします。※あくまで僕(はるまき)流の解釈をもとに説明しています。詳しいことは他のサイトを参考にしてください😭

 

Controller側の設定

まずはコントローラー側の設定から。こちらで設定した値がView側に投げられるわけです。

 


    public function getHoge(){

        $value = "hoge";//変数

        $hogeItems = Hoge::select('foo','hoge')->get();//DBから取得
        
        ①return view('index.Hoge')->with('value',$value);//変数をキーと一緒に送る
        ②return view('index.Hoge',compact('hogeItems'));//コレクション型で送る
        ③return view('index.Hoge',compact('hogeItems'))->with('value',$value);//①②を合わせて。
    }

いくつかreturn文を記述してます。

 ①は変数をViewに渡すときに使用します。Laravelでは変数をView側に渡すときにキーと一緒に渡してあげます。「キーなんて使わずにそのまま渡さんかーい!!!」と僕は初め感じました。渡す時の型がきっと内部で決まっているんでしょうね。

②はコレクション型を渡すときに使います。例ではDBから取得したコレクション型の値をView側に渡しています。また③のように一緒に使うこともできます。

 

View側の設定

次にView側のコードです。コントローラーで設定した値を受けれるようにします。

 

        
        <p>$value</p>//・・・①

         @foreach ($hoges as $hoge)//・・・②
           <div>回答者:{{$hoge->name}}</div>
           <div>回答:{{$hoge->contents}}</div>
         @endforeach

①ではコントローラーで設定したキー(“value")に”$”をつけて取得しています。これは比較的シンプルで、「OK〜OK〜」って感じです。

次に②の方。「おりゃ〜」って感じになってます。これはlaravelに入っているbladeという機能のforeach文を使って、コントローラから受け取ったコレクションを分解しています。このケースでは受け取る値の中身はhogeインスタンスです。

複数個のインスタンスが格納されている1つのコレクション型変数をforeachで回して、ひとつずつ中身を確認しているイメージです。

 

また、他のコントローラーから、そのViewを呼び出したときに、そのコントローラーから上記で記述した値が渡されていないケースを、考えます。この時、Laravelに「お前、何言ってんの、そんな値ねーから!!」と言われます。なので、そうならない為に、「値が渡されない場合」の記述をしないといけません。それが以下。

    <p>$hoge ?? ''</p>//①
  
    @if ($hoges->isEmpty())//②空かどうかをチェックする。
      //処理
    @else
      //処理

①では$hogeがない時のケースを想定。 “??"の後に記述した値が、もし$hogeがないときに、代入される値になります。上記では、もしもコントローラーから$hogeが渡されていないときには、空文字が代入されることになります。

②のケースはコレクション型に対応します。isEmpty()メソッドなどを使い、創意工夫してます。他にも様々なメソッドがありますので、詳しくは公式サイトをご覧ください。公式サイトはこちら

最後に

コントローラーからビューに値を渡して、それを受け取る処理はフレームワークでは絶対に欠かせないことですよね。しっかりと押さえておきたい!!僕も忘れたくない!!笑 すぐに忘れてしまうけど!

それでは、また次回!

もしよろしければご確認ください。人生初めてのWebサービス:アクアリウム専用質問サイト→Q&Aquarium