概要
クエリーパラメーターは、フォームの送信時にGETメソッドを指定した時に送信されるパラメーター形式。
ルートパラメーターが直接URIの一部としてパラメーターの値を送るのに対して、クエリーパラメーターはパラメーターの名前と値をセットで送る。たとえば以下の様に。
http://www.my_bbs.com/search_post?user_id=10
このパラメーターをコントローラーで取得するには、以下の2通りの方法がある。
- アクションの引数で
Request
オブジェクトを指定し、その属性でパラメーター名を指定する。 - アクション内で
request()
関数の引数にパラメーター名を指定する
いずれの場合も、コントローラーで以下の指定が必要。
use Illuminate\Http\Request;
ルーティング
ルーティング設定では、パラメーターを送信するパスとそれを受け取るコントローラー・アクションを指定するだけで、特別の記述はない。
Route::get('パス', 'ルーティング先');
たとえばmy_bbs
というアプリケーションで以下のようにルーティングを設定した場合、
1 |
Requeset::get('/search_post/', 'PostController@searchPost'); |
リクエスト側のURLは以下のようになる。
http://www.my_bbs.com/search_post?user_id=5
複数のパラメーターを送る場合は以下の様に'&'
で区切る。
http://www.my_bbs.com/search_post?user_id=5&keyword=hello
ルーティングではパラメーターの数や名前には関与せず、コントローラー・アクションにおいてこれらを扱う。
コントローラー
必須事項
Request使用の宣言
コントローラー定義前に以下の定義が必要。artisanでコントローラーを生成すると、この定義は自動的に含まれる。
use Illuminate\Http\Request;
アクションの引数でのRequest
オブジェクト指定
コントローラーでクエリーパラメーターを扱うのに、Request
パラメーターをアクションの引数に指定する方法と、request()
関数を使う方法があるが、いずれの場合でも、アクションの引数にRequest
クラスのオブジェクトを引数として指定する。
public function アクション名(Request $request) { ... }
引数の変数名は、必ずしも$request
でなくてもよい。
共通のコントローラー・アクションの形式
上記2つをまとめたコントローラー・アクションの一般形は以下のとおり。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class コントローラー名 extends Controller { public function アクション名(Request $request) { ..... } } |
アクションにおけるパラメーターの取得
Requestオブジェクトの属性からパラメーターを受け取る方法
アクションの引数に指定したオブジェクトの属性値に、パラメーター名を指定して値を取り出す。引数の変数名は$request
である必要はなく任意。
$request->パラメーター名
たとえば先のリクエストの項で挙げた例の場合、以下のような処理例となる。ビューではコントローラーで設定された変数を使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PostController extends Controller { public function searchPost(Request $request) { $user_id = $request->user_id; return view( 'samples.posts', [ 'title' => 'クエリーパラメーターのサンプル', 'user_id' => $user_id, ] ); } } |
複数パラメーターが送られる場合は、Request引数の属性で順次パラメーター名を指定して取り出す。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public function searchPost(Request $request) { $user_id = $request->user_id; $post_id = $request->post_id; return view( 'samples.route_parameter', [ 'title' => 'ルートパラメーターのサンプル', 'user_id' => $user_id, 'post_id' => $post_id, ] ); } |
request()関数にパラメーター名を指定して受け取る方法
request()
関数の引数に、クエリーのパラメーター名を指定して値を取り出す。
request('パラメーター名');
上記の複数パラメーターの例をこの方法で書き換えると以下のとおり。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public function searchPost(Request $request) { $user_id = request(user_id); $post_id = request(post_id); return view( 'samples.route_parameter', [ 'title' => 'ルートパラメーターのサンプル', 'user_id' => $user_id, 'post_id' => $post_id, ] ); } |
パラメーター省略時
リクエスト送信時にパラメーターを送信した時など、コントローラーで想定したパラメーターが存在しないときはエラーにならず、値が空文字列となる。