【Laravel】ルートパラメータの使い方
今回はURLに変数を埋め込む「ルートパラメータ」の使い方を解説します!
ルートパラメータの使い方
座学よりも前に早速実践の中で使い方を見ていきましょう。
今回はゴールとして会員登録しているあらゆるユーザーのプロフィール画面を表示することを目標にします。
(今回は事前にユーザーのデータを10件Seederで作成してあります。)
ダメな例
最初にダメな例として静的な方法をご紹介して、後から理想的な方法をご紹介いたします。
View部分を作成
まずは実際にプロフィール画面を表示するbladeを作成します。
ファイル名はusers.blade.phpにします。
ファイルの中身はこんな感じにするとします(めっちゃ質素です汗)
Controllerの作成
次にプロフィール表示用のControllerを作成します。
ユーザーについてのControllerなので、ファイル名はUsersControllerにするとします。
シェルで以下のartisanコマンドを実行してControllerを新規作成します。
1 2 3 4 |
$ php artisan make:controller UsersController // 以下のようなメッセージが表示される INFO Controller [app/Http/Controllers/UsersController.php] created successfully. |
「プロフィール画面を表示する」ので、メソッド名はprofileにします。
最後にbladeを表示したいのでviewを返すようにします。
ここまで以下。
Modelの取得
まずはID番号が1のユーザーのプロフィールを表示したいのでModel経由でID番号が1のModelを取得してViewに渡します。
routesの編集
最後にこれを表示するためにroutesを作成していきます。
/users/1
でID番号が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}
に変更しました。
(※最低限の理解のためにルートモデルバインディングは今回はしません。)
UsersControllerも編集します。
メソッドに引数を追加
以下の画像のように、profile
メソッドに先ほどweb.phpに追加したURLと同じid
という名前の変数を引数に取ります。
この$id
の中身は何なのでしょうか??
中身を確かめるためにLaravelの開発でお馴染みのdd
メソッドを以下の場所に追加して、$id
の中身を確認してみましょう。
この状態で再度localhost/users/1
にアクセスしてみましょう。
画面には「1」と表示されました。
次はURLに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
を使って取得するユーザーを変更しましょう。
この状態でlocalhost/users/1
を表示してみてください。
次はコードを何も変えずに、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ライフを過ごしてくださいっ!!!!
-
前の記事
【Laravel】Factoryで例外を作るやつ 2022.10.07
-
次の記事
真偽値を返す関数はどうやって作る?? 2023.03.07