
LaravelでGETの値をコントローラーで利用する方法についてです。ルーティングの設定と、コントローラーのメソッドの設定の作業が必要です。
簡単なパラメータの取得と、少し複雑な形のデータの取得を記載します。
GETの中身の確認
routes > web.php
0 1 2 |
Route::get('/test' , 'PostsController@test'); |
アクセスしてみる → http://www.example.com:8000/test?id=1&cate=2&color=3
HTTP > Controllers > PostsContoroller.php
0 1 2 3 4 5 6 |
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); 」にすると以下のようになります。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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);」としてみます。
0 1 2 3 4 5 6 7 8 |
Symfony\Component\HttpFoundation\ParameterBag {#50 ▼ #parameters: array:3 [▼ "id" => "1" "cate" => "2" "color" => "3" ] } |
今度はqueryの中身が出力されました。
queryのパラメータの中身は「$request->all();」で取得することができます。
0 1 2 3 4 5 6 7 8 9 10 11 12 |
「コントローラーのメソッド」 public function test(Request $request){ dd($request->all()); } -- 出力 -- array:3 [▼ "no" => "1" "cate" => "2" "color" => "3" ] |
「データの絞り込み」
0 1 2 3 4 5 6 7 |
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;
こんな感じに取得できるようにします。
0 1 2 3 4 5 6 7 |
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に移行するときに活用できます。