Laravel – ルートパラメーター

概要

ブラウザーなどからのリクエストの際、URLにパラメーターを指定して、それをLaravelで利用することができる。

クエリーパラメーター(URIパラメーター)と異なり、ルーティングのパスそのものにパラメーターを含める方法。

たとえば以下のようにリクエストでパラメーターとして'1'を送り、

ルーティングで以下のようにパラメーターを受け取り、

アクションで変数として受け取って利用する。

ルーティングでの設定

パラメーターを受信する場合、ルーティングでパラメーターの部分を{}で囲む。

Route::get('パス/{パラメーター}', 'ルーティング先');

これ呼び出すリクエスト側のパラメーター指定は以下の通り。

http://ホスト名/パス/パラメーター

たとえばmy_bbsというアプリケーションで以下のようにルーティングを設定した場合、

リクエスト側でid=3を送る場合ののURLは以下のようになる。

http://www.my_bbs.com/user/3

コントローラーでの受け取り方

ルートパラメーター付きでルーティングされたコントローラーのアクションでは、その引数にパラメーターを指定する。

先のルーティングのパラメーターを利用する場合、たとえば以下のようなコントローラー・アクションになる。

なお、ルーティングで指定したパラメーターの名前とアクションの引数に使う変数名は、必ずしも一致させなくてもよい。

デフォルトパラメーター

ルーティングでパラメーター設定を{パラメーター?}のように書き、アクションで引数のデフォルト値を指定すると、パラメーターが省略されたときのデフォルト値を設定できる。

ルーティングの例

アクションの例

この場合、http://www.my_bbs.com/userのようにパラメーターを指定しないと、id=0として処理される。

複数のパラメーター

ルートパラメーターは複数設定することもできる。

たとえば以下のように、ユーザーIDと投稿IDを想定してルーティングできる。

これを受け取るアクション側では、パラメーターの順番に合わせて引数を指定する。

この場合もパラメーターの名前と変数名は同じである必要はなく、その順番のみに従ってパラメーターの値が変数に割り当てられる。

なお複数パラメーターの場合のデフォルトパラメーターについては、最後のパラメーターには設定できるが、それより前のパラメーターには設定できない。

たとえばRequest::get(/user/{user_id?}/post/{post_id?}としてアクションの引数でそれぞれに対応する引数にデフォルト値を設定しても、

http:/www.my_bbs.com/usr/3/post

のように最後のパラメーターを省略するのは可能だが

http:/www.my_bbs.com/usr/post

のように全パラメーターを省略したり

http:/www.my_bbs.com/usr//post

途中のパラメーターを省略すると正しくリクエストできない。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です