今回はLaravelでURLのクエリパラメータを取得する方法をパターン別に紹介します。
URLのクエリパラメータとは「https://test.com/post?querytest=aaa」の
「?querytest=aaa」の部分です。
「?」以降の部分です。
大きく、コントローラ側で取得する方法とビュー側で取得する方法と、クエリパラメータの種類による取得方法の違いを紹介したいと思います。
LaravelでURLクエリパラメータを取得する「query」メソッド
URLクエリパラメータを取得するには「query」メソッドを使用します。
例として「https://test.com/post?querytest=aaa」このURLからクエリパラメータを取得することにします。
コントローラー側でクエリパラメータを取得する場合
まずはコントローラ側での取得方法を紹介します。
use Illuminate\Http\Request;
public function index()
{
$query = $request->query('querytest');
return view('posts.index')
->with('query', $query);
}
コントローラ側で、「$request->query()」と書いて取得します。
queryメソッドの第一引数にクエリパラメータに指定した文字列を指定します。
上記の例では「$query」という変数に「aaa」が代入されます。
ビュー側でクエリパラメータを取得する場合
続いてビュー側で直接クエリパラメータの取得方法を紹介します。
{{ request()->query('querytest') }}
コントローラー側で取得する場合と若干書き方が異なるので注意が必要です。
指定したクエリ文字列にデータが存在しない場合の値の設定方法
query()メソッドの第二引数を指定すると、クエリ文字列にデータが存在しない場合に代わりで入るデータになります。
use Illuminate\Http\Request;
public function index()
{
$query = $request->query('querytest2', 'bbb');
return view('posts.index')
->with('query', $query);
}
この場合、「https://test.com/post?querytest=aaa」にアクセスした際に、$queryに入るデータは「bbb」となります。
全てのクエリ文字列を取得する場合
全てのクエリ文字列を取得する場合は引数を指定しないようにします。
use Illuminate\Http\Request;
public function index()
{
$query = $request->query();
return view('posts.index')
->with('query', $query);
}
「https://test.com/post?querytest=aaa&querytest2=bbb」にアクセスしたとします。
すると、$queryには以下の連想配列となって代入されます。
['querytest' => 'aaa', 'querytest2' => 'bbb']
inputメソッドはURLクエリパラメータ取得時には使わない方が良い
URLクエリパラメータの取得には、input()メソッドも使用することができます。
query()メソッドと同じように「$request->input(‘querytest’)」とすることで指定されたパラメータを取得できます。
しかしinput()メソッドにはPOSTリクエストで取得したデータも入ってきます。
仮にform内に同じnameのinput要素などがあった場合などは非常にややこしいです。
URLクエリパラメータのみを取得したい場合はquery()メソッドを使う方が明示的に表すこともできて良いかと思います。
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!