【Laravel】controllerからviewへのデータの渡し方まとめ

対象 Laravelでcontrollerからviewへどうやってデータを渡すのかいつも混乱する人。というか自分用。Laravel始めたばかりの人でも役に立つとは思う。

書いている人 書いてる時点でプログラミング9カ月の初心者

前提 Laravelのプロジェクトを作成できること。LaravelのMVCモデルを理解していること。

環境 Laravel8.0

データの渡し方の3つを紹介していきます。また、実際にLaravelでも表示してみます。

目次

事前準備

わかりやすくするために、Laravelプロジェクトで最初にコントローラーとビューを作成しておきます。(データの渡し方だけ知りたい人は本題の方へ飛ばしてください。)

①controllerの作成

まずは、controllerを作成する。プロジェクトのworkspaceに入って、artisanコマンドで適当なcontrollerを作成する。
controllerの作成に成功すると、app/http/Controllers/の中に、作ったcontrollerができているはずだ。

artisanコマンドを打つにはworkspaceに入ろう!
コマンドを打ったら、controllerが作成される。
小文字で書いちゃったけどControllerと大文字で打った方が見やすいかも。

controllerを作成したら、アクションを追加して、②で作成するviewを返すように設定しておこう。

indexアクションを作成。practice.blade.phpを返すように記述。

②viewの作成

controllerを作ったら今度はviewの作成だ。

resources/views/の中に、practice.blade.phpを作成する。VScodeで普通に右クリックしてファイルを作成だ。
blade作成してくれるコマンドって何でないんだろう。

viewsフォルダ上で右クリックして、、、
適当にbladeを作成だ。
ファイルの中身を適当に書く。

③ルーティングする。

後は、ルーティングだ。/practiceにアクセスしたら、①で作成したcontrollerにアクセスするように記述。
ルーティングはroutes/web.phpに記述していく。

web.phpを開いて記述を追加。
元々ある記述に上の文を追加したら、/practiceにアクセスして繋がるか確かめよう。
/practiceより前は人によってlocalhostだったりする。
このように表示されたら準備完了!

最新のLaravel8だと、ルーティングの書き方が変わったぽくて、名前空間まで書く必要があるっぽい。名前空間書かずに、アクセスすると以下のようなエラーがでちゃう。

Laravel8だと以前のような記述ではダメみたい。verアップも良いことばかりじゃないよね。

こっから本題。

配列で渡す

日本語版ドキュメントをチェックすると、最初に配列で渡すことが書かれている。view関数にキーと値をセットして、viewに送ろう。view側(LaravelだとBladeというエンジンを使用)では、キーを書くことで値が表示される。

Laravel日本語版ドキュメント「ReaDouble」より。

では、準備で作成したcontrollerに配列を用意してみる。

view関数の第二引数に配列をセット! ああ〜二郎でも二郎系でもいいから食べたい。

今度は、view側にcontrollerで設定したキー(この場合ramen)を書いていく。

Bladeでは、{{ $ramen }}という感じで書く。
Laravel日本語版ドキュメント「ReaDouble」のビューにも例が記載されている。

viewの記述が終わったら、/practiceにアクセスまたは更新しよう。うまく配列で設定された値が表示されるはずだ。

データがうまく渡ったら成功!

withで渡す

次はwithメソッド。これも、日本語版ドキュメントに記述がある。


withメソッドは、リレーション関係の時によく使うメソッド。(今は意味わからなくてもよい。)
withメソッドの中身は、vendor/laravel/framework/src/illuminate/database/eloquentの中にある。
読んでも意味わからんので、自分のような初心者がvendorを覗きにいくのはまだ早い。

ではこれもcontrollerに記述しよう。さっきの配列は消しておきます。

view関数の後に→を追加して、withメソッドを記述。そこに配列と同じようにkeyと値をセットする。

withメソットも基本的には、配列と同じような書き方

書けたら、/practiceにアクセスまたは更新。

ちゃんとデータが変わっているはずだ。keyと値は好きなようにセットして自分で確かめてみよう。

compactで渡す

最後に、compact。
compacで渡すのが結構便利。compactはLaravelではなく、PHPの配列を作ってくれる関数だ。(LaravelはPHPのフレームワークだから当然PHPの関数は使える)

PHP公式リファレンスより。

上の説明によると、compactメソッドは、変数名を突っ込めば、その変数名と値から配列を作成してくれるモノだ。

最初に、変数に値を突っ込み。後は、その変数だけ送ればよい。

dd()は、めちゃめちゃ便利な関数。中身を確認した後処理を止めてくれる。
dd($result)の結果、resultには配列ができていることがわかった。
compactを使った値を送る。
ちゃんと値が送信できた。

どの送り方でもいいじゃないかと思うかもしれないが、データを複数送る場合、compactの方がすっきりする。
配列やwithは一々値とkeyを全て書かなければならないが、compactだと変数だけですむので便利。

変数を2個用意して、それぞれcompactに記入。
viewに変数をセット。
食い過ぎだ。

compact便利。

まとめ

結果的にどの方法で渡してもよいが、個人的に一番わかりやすいのはcompact。というかだいたいのサイト見てもcompactをオススメしてる。可読性(コードの読みやすさ)が上がるからかな。後、コード書く量そもそも少ないので楽。
viewに用意されるのは、配列で渡した時のkey名だということを押さえておくとよい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次