概要
ブラウザーなどからのリクエストの際、URLにパラメーターを指定して、それをLaravelで利用することができる。
クエリーパラメーター(URIパラメーター)と異なり、ルーティングのパスそのものにパラメーターを含める方法。
たとえば以下のようにリクエストでパラメーターとして'1'
を送り、
1 |
http://.../myapp/1 |
ルーティングで以下のようにパラメーターを受け取り、
1 |
Route::get('/myapp/{param}', 'MyController@useParameter'); |
アクションで変数として受け取って利用する。
1 2 3 4 5 6 |
class MyController extends Controller { public funtion($param) { // $param(内容は1)を利用する } }る |
ルーティングでの設定
パラメーターを受信する場合、ルーティングでパラメーターの部分を{}
で囲む。
Route::get('パス/{パラメーター}', 'ルーティング先');
これ呼び出すリクエスト側のパラメーター指定は以下の通り。
http://ホスト名/パス/パラメーター
たとえばmy_bbs
というアプリケーションで以下のようにルーティングを設定した場合、
1 |
Requeset::get('/user/{id}', 'UserController@getProfile'); |
リクエスト側でid=3
を送る場合ののURLは以下のようになる。
http://www.my_bbs.com/user/3
コントローラーでの受け取り方
ルートパラメーター付きでルーティングされたコントローラーのアクションでは、その引数にパラメーターを指定する。
1 2 3 4 5 6 |
class コントローラー名 extends Controller { public function アクション名(パラメーター変数) { // パラメーター変数の利用 } } |
先のルーティングのパラメーターを利用する場合、たとえば以下のようなコントローラー・アクションになる。
1 2 3 4 5 6 |
class UserController extends Controller { public function getProfile($id) { return view('user.profile',['id' => $id]); } } |
なお、ルーティングで指定したパラメーターの名前とアクションの引数に使う変数名は、必ずしも一致させなくてもよい。
デフォルトパラメーター
ルーティングでパラメーター設定を{パラメーター?}
のように書き、アクションで引数のデフォルト値を指定すると、パラメーターが省略されたときのデフォルト値を設定できる。
ルーティングの例
1 |
Route::get('/user/{id?}', 'UserController@getProfile'); |
アクションの例
1 2 3 4 5 6 7 8 9 10 11 |
class UserController extends Controller { public function getProfile($id=0) { return view( 'samples.route_parameter', [ 'id' => $id, ] ); } } |
この場合、http://www.my_bbs.com/user
のようにパラメーターを指定しないと、id=0
として処理される。
複数のパラメーター
ルートパラメーターは複数設定することもできる。
たとえば以下のように、ユーザーIDと投稿IDを想定してルーティングできる。
1 |
Route::get('/user/{user_id}/post/{post_id}', 'PostController@getPost'); |
これを受け取るアクション側では、パラメーターの順番に合わせて引数を指定する。
1 2 3 4 5 6 7 8 9 10 11 12 |
class PostController extends Controller { public function getPost($user_id, $post_id) { return view( 'samples.route_parameter', [ 'user_id' => $user_id, 'post_id' => $post_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
途中のパラメーターを省略すると正しくリクエストできない。