【Laravel】ルートパラメータの使い方

【Laravel】ルートパラメータの使い方

今回はURLに変数を埋め込む「ルートパラメータ」の使い方を解説します!

ルートパラメータの使い方

座学よりも前に早速実践の中で使い方を見ていきましょう。

今回はゴールとして会員登録しているあらゆるユーザーのプロフィール画面を表示することを目標にします。

(今回は事前にユーザーのデータを10件Seederで作成してあります。)

ダメな例

最初にダメな例として静的な方法をご紹介して、後から理想的な方法をご紹介いたします。

View部分を作成

まずは実際にプロフィール画面を表示するbladeを作成します。

ファイル名はusers.blade.phpにします。

ファイルの中身はこんな感じにするとします(めっちゃ質素です汗)

resources/views/users.blade.php

Controllerの作成

次にプロフィール表示用のControllerを作成します。

ユーザーについてのControllerなので、ファイル名はUsersControllerにするとします。

シェルで以下のartisanコマンドを実行してControllerを新規作成します。

「プロフィール画面を表示する」ので、メソッド名はprofileにします。

最後にbladeを表示したいのでviewを返すようにします。

ここまで以下。

app/Http/Controllers/UsersController.php

Modelの取得

まずはID番号が1のユーザーのプロフィールを表示したいのでModel経由でID番号が1のModelを取得してViewに渡します。

app/Http/Controllers/UsersController.php

routesの編集

最後にこれを表示するためにroutesを作成していきます。

/users/1でID番号が1のユーザーのプロフィール画面を表示することにします。

routes/web.php

実際に見てみる

準備ができたので、それでは実際にlocalhost/users/1にアクセスしてみましょう!

以下のような画面が表示されていると思います。

localhost/users/1

1人目のプロフィール画面は表示することができました。

問題点

それでは2人目、3人目、アプリケーションのユーザーが増えて10000人目のユーザーはどうやって表示したらいいでしょうか??

web.phpに/users/1から/users/10000まで10000行のコードを書くのは馬鹿げていますし、ユーザーが増えたら都度web.phpを更新する作業も面倒なのは自明です。

こんなときは「ルートパラメータ」を使いましょう!

理想の例

要はURLの最後の1の部分だけが変わって、それ以外の処理は基本的に共通なので、ID番号の部分(今回の例で言うと1の部分)だけ変更しましょう。

(やっと本題に入ります笑、たくさん勉強してLaravelスキルを身につけましょう!)

routesにパラメータを追加

まずはweb.phpのroutesを編集します。

以下の画像にある通り、今まで/users/1だったURLを/users/{id}に変更しました。

(※最低限の理解のためにルートモデルバインディングは今回はしません。)

routes/web.php

UsersControllerも編集します。

メソッドに引数を追加

以下の画像のように、profileメソッドに先ほどweb.phpに追加したURLと同じidという名前の変数を引数に取ります。

app/Http/Controllers/UsersController.php

この$idの中身は何なのでしょうか??

中身を確かめるためにLaravelの開発でお馴染みのddメソッドを以下の場所に追加して、$idの中身を確認してみましょう。

app/Http/Controllers/UsersController.php

この状態で再度localhost/users/1にアクセスしてみましょう。

localhost/users/1

画面には「1」と表示されました。

次はURLにlocalhost/users/2と入力してみると、どうなるでしょうか?

localhost/users/2

今度は画面に「2」と表示されました。

察しが良い方はお気づきかもですが、ddメソッドにはlocalhost/users/xxxの「xxx」の部分に入れた文字が表示されています。

localhost/users/3と入力すれば「3」と表示されますし、localhost/users/100と入力すれば「100」と表示されます。

(ちなみにlocalhost/users/helloと入力すれば「hello」と表示されますし、localhost/users/お疲れ様ですと入力すると「お疲れ様です」と表示されます笑)

ルートパラメータの正体

これはどういうことかと言うと、web.phpで/users/{id}と入力したと思いますが、この{id}の部分はURLの/users/xxxの「xxx」の部分が反映されています。

xxx」の値はそのままprofile($id)$idの部分に渡されて、今回はそれをそのままddメソッドで出力していました。

つまりlocalhost/users/xxxと入力すると、profile($id)$idには「xxx」が入るので、ここからはそれを使って取得するユーザーを自在に変えていきましょう!

以下の画像のように、$idを使って取得するユーザーを変更しましょう。

app/Http/Controllers/UsersController.php

この状態でlocalhost/users/1を表示してみてください。

localhost/users/1

次はコードを何も変えずに、localhost/users/2を表示してみましょう。

localhost/users/2

この状態にすればID番号が3だろうが4だろうが、10でも1000でも、なんでも表示することができます。(厳密にいえば、localhost/users/xxxの「xxx」が数字だったらですが)

冒頭にあった以下の問題も解決することができます!

それでは2人目、3人目、アプリケーションのユーザーが増えて10000人目のユーザーはどうやって表示したらいいでしょうか??

web.phpに/users/1から/users/10000まで10000行のコードを書くのは馬鹿げていますし、ユーザーが増えたら都度web.phpを更新する作業も面倒なのは自明です。

これで皆さんも便利はLaravelライフを過ごしてくださいっ!!!!