LoginSignup
2
1

More than 3 years have passed since last update.

【Laravel基礎】データの受け渡し方 【①ルートパラメータ②Implicit Binding】

Last updated at Posted at 2020-11-17

概要

Laravel学習で自分がつまずいた部分を備忘録としてまとめています。
今回はデータの受け渡しに関する記事です。

つまずいたポイント

記事投稿型の簡易アプリ作成時につまずいた問題です。

記事一覧ページ→記事の詳細ページに移る際、
ビュー→コントローラに投稿のデータを渡すにはどうしたら良いのか?
下記2つの方法で解決出来たので記事にしてみました。

①ルートパラメータ

②Implicit Binding

以下、記事内容です!

ルートパラメータ

まず渡し方の1つがルートパラメータを用いた方法です。

■ビュー

index.blade.php
 @foreach ($posts as $post)
    <li>
       <a href="/posts/{{ $post->id }}">{{ $post->title }}</a>
    </li>
 @endforeach

まず、ビュー上でURLを用いて、ルーティングに投稿のIDを渡します。

■ルーティング

web.php
Route::get('/posts/{id}','PostsController@show')

ここからがルートパラメータを用いた方法です。URLの中に{ }を設定します。
この{ }の中身がパラメータと言う扱いになり、アクション内でこのパラメータが使用可能になります。
仮で{ }の中身を{id}と設定していますが、中身にはビューで設定した$post->idが入ってきます。
※{ }は変数扱いなので、中身の文字はわかりやすい単語でOK

【例】'/post/test'でアクセスした場合 → 「test」がパラメータ扱い
   '/post/1'でアクセスした場合  → 「1」がパラメータ扱い

■コントローラ

PostsController
    //アクションの引数にパラーメータを設定
    public function show($id) {
          //パラメータをアクション内で使用出来る
          $post = Post::find($id);
          return view('posts.show')->with('post', $post);
        }

アクションの引数の中に先ほどのパラメータを代入する事で、
アクション内でそのパラメータが使用可能になります。

上記のshowアクションでは、
パラメータを元にfindメソッドで該当の記事データを再取得→
記事データを渡しつつ投稿の詳細画面を表示することが出来ました。

Implicit Binding

次はImplicit Bindingです。
ルートパラメータの場合、URLに書かれた文字列だけをコントローラに渡しました。
Implicit Bindingの場合は、投稿を丸ごと渡すことが出来ます。
下記、その手順です。

■ビュー

index.blade.php
@foreach ($posts as $post)
    <li>
       <a href="/posts/{{ $post }}">{{ $post->title }}</a>
    </li>
@endforeach

URLに$postを指定します。

■ルーティング

web.php
Route::get('/posts/{post}', 'PostsController@show')

先述のルートパラメータで{post}を指定します。

■コントローラー

PostsController
public function show(Post $post) {
              return view('show')->with('post',$post);
            }

アクションの引数を(Post $post)に指定→投稿の中身を$postで使用できます。

先ほどと違い、アクション内で投稿を再取得せずに$postをそのまま記事詳細画面に渡すことが出来ました。楽ちんですね。

まとめ

以上、Laravelにおけるビュー→コントローラへデータの渡し方でした。
Implicit Bindingの方が書くコードの量が少なくなるので効率的ですね。

最後まで読んで頂きありがとうございました!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1