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に移行するときに活用できます。