[Laravel] Getの値をコントローラーで取得する方法

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);
}
testGET /test?id=1&cate=2&color=3 HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: ja,en-US;q=0.9,en;q=0.8 Cache-Control: max-age=0 Connection: keep-alive Cookie: XSRF-TOKEN=eyJpdiI6ImhUa2kyTXUydnkzNHhUYXF3Y1dEVmc9PSIsInZhbHVlIjoiaXN5WWFGNTRoNDh5empucW9VSXVuSGZjVXh4Q0hPK1ZhcmFINjBwWTdYQlYzUXVsWFFyTGt0Wk1YemxzOGZpMyIsIm1hYyI6IjViOWRhMjUwZWU3Nzg0OWE4ZTE2YTUyNTJmMTA0YzVmOTg3NzFhYmRiYzAyNDE5ZGFkNzVlNTcwOWNjZTViODIifQ%3D%3D; laravel_session=eyJpdiI6IlJwMVhaSGpOODZvaW9UazhBY21YcXc9PSIsInZhbHVlIjoiXC9zSTluUkt3aDJqNEZKVUYwbGdXVnVPYVpoaVMwN2xtSXBLOUxEWTJlOFRJdGtcLzdJbUhWaEk2UVRicXdsMjJQIiwibWFjIjoiOGYwOWRkZWFkZDA4NDU1YmQ1MTNjM2RiNmYwMzhlOTg3Y2JhYjU1OWQ2NmE1NzdjNGU2NTNmN2E1NGQ1MmI1ZCJ9 Host: xxx.xxx.xxx.xxx:8000 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Cookie: XSRF-TOKEN=hZnK6rAMUQC3r2XLuW88QSWyI56muJodLgD2Sz41; laravel_session=G5n9OdXNIM66lSobzAfWTcSiV5WSaZq9mjlXhfGl

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



Author: webmaster