LaravelでGETの値をコントローラーで利用する方法についてです。ルーティングの設定と、コントローラーのメソッドの設定の作業が必要です。
簡単なパラメータの取得と、少し複雑な形のデータの取得を記載します。
GETの中身の確認
routes > web.php
Route::get('/test' , 'PostsController@test');
アクセスしてみる → http://www.example.com:8000/test?id=1&cate=2&color=3
HTTP > Controllers > PostsContoroller.php
public function test(Request $request)
{
$request->url();
echo ($request);
}
はじめに GET でドメイン以下の「/test?id=1&cate=2&color=3」が取得されています。
TOKENやUser-Agent、XSRF-TOKEN、laravel_session などの情報が入っていました。
コントローラーのtestメソッドで出力を「 dd($request); 」にすると以下のようになります。
Illuminate\Http\Request {#42 ▼
#json: null
#convertedFiles: null
#userResolver: Closure($guard = null) {#159 ▶}
#routeResolver: Closure() {#161 ▶}
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#44 ▶}
+request: Symfony\Component\HttpFoundation\ParameterBag {#50 ▶}
+query: Symfony\Component\HttpFoundation\ParameterBag {#50 ▼
#parameters: array:3 [▼
"id" => "1"
"cate" => "2"
"color" => "3"
]
}
+server: Symfony\Component\HttpFoundation\ServerBag {#46 ▶}
+files: Symfony\Component\HttpFoundation\FileBag {#47 ▶}
+cookies: Symfony\Component\HttpFoundation\ParameterBag {#45 ▶}
+headers: Symfony\Component\HttpFoundation\HeaderBag {#48 ▼
#headers: array:9 [▼
"host" => array:1 [▶]
"connection" => array:1 [▶]
"cache-control" => array:1 [▶]
"upgrade-insecure-requests" => array:1 [▶]
"user-agent" => array:1 [▶]
"accept" => array:1 [▶]
"accept-encoding" => array:1 [▶]
"accept-language" => array:1 [▶]
"cookie" => array:1 [▶]
]
#cacheControl: array:1 [▶]
}
#content: ""
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: "/test"
#requestUri: "/test?id=1&cate=2&color=3"
#baseUrl: ""
#basePath: null
#method: "GET"
#format: null
#session: Illuminate\Session\Store {#189 ▼
#id: "G5n9OdXNIM66lSobzAfWTcSiV5WSaZq9mjlXhfGl"
#name: "laravel_session"
#attributes: array:3 [▶]
#handler: Illuminate\Session\FileSessionHandler {#190 ▶}
#started: true
}
#locale: null
#defaultLocale: "en"
-preferredFormat: null
-isHostValid: true
-isForwardedValid: true
basePath: ""
format: "html"
}
}
ddで出力して中身をみてみると、queryの項目の中に#parametersがあり、その中に、id ,cate ,colorが配列で入っています。
今回はqueryの部分を取得したいのでコントローラーのtestメソッドで「dd($request->query);」としてみます。
Symfony\Component\HttpFoundation\ParameterBag {#50 ▼
#parameters: array:3 [▼
"id" => "1"
"cate" => "2"
"color" => "3"
]
}
今度はqueryの中身が出力されました。
queryのパラメータの中身は「$request->all();」で取得することができます。
「コントローラーのメソッド」
public function test(Request $request){
dd($request->all());
}
-- 出力 --
array:3 [▼
"no" => "1"
"cate" => "2"
"color" => "3"
]
「データの絞り込み」
dd($request->all('color'));
-- 出力 --
array:1 [▼
"color" => "3"
]
複雑なURLの取得
「https://www.example.com:8000/test/1/?no=1&cate=2&color=3」というようなURLをGETしてみます。
「/test/」の後の「/1/」はidを意味しています。
コントローラーでこのパラメータを変数に入れてみます。
$id=1;
$no=1;
$cate=2;
$color=3;
こんな感じに取得できるようにします。
public function test(Request $request, $id = null){
$request_params = $request->all();
$no = $request_params['no'];
$cate = $request_params['cate'];
$color = $request_params['color'];
}
$idは自動に取得できているので、その他のパラメタを取得すればOKです。
CakePHPで作ったシステムはこのようなURL構造になっていたりするので、URLの形を変えないでLaravelに移行するときに活用できます。