【Symfony】Requestオブジェクトからリクエストパラメータを取得する

Requestオブジェクトに触れる機会は多く、様々な情報を取得することができる。
ここではリクエストパラメータに関する扱いをまとめる。

(導入)Requestオブジェクトを扱う

Symfonyのコントローラではアクションの引数とすることで、簡単に Request オブジェクトを扱うことができる。

<?php
// ...
use Symfony\Component\HttpFoundation\Request;
// ...
public function index(Request $request)
{
    $page = $request->query->get('page', 1);
}

リクエストパラメータへのアクセス

GETおよびPOSTのリクエストパラメータにアクセスするには、それぞれ以下のようにする。

<?php
// リクエストパラメータfooの値を取得
// GET
$request->query->get('foo');
// POST
$request->request->get('foo');

また、他にもattributes プロパティでルーティングパラメータの取得ができる。

<?php
// @Route("/{foo}") としていたときには以下のようにしてパラメータの値が取得できる
$request->attributes->get('foo');

query request attributes はすべて ParameterBag オブジェクトであり、このオブジェクトには get() の他にも all()has() などといったメソッドが用意されている。

<?php
// すべてのPOSTリクエストパラメータの値を取得する
$params = $request->request->all();
// 連想配列なので以下のように各値へアクセスする
$params['foo'];

// 特定のパラメータを持っているかどうかをチェックする
$request->query->has('foo') // true or false

あと、これらのプロパティに横断的にアクセスできるメソッドも用意されている。

<?php
// Requestオブジェクトのgetメソッドはrequest・query・attributesプロパティを横断的に検索する
// 優先順位は高い順に attributes > query > request っぽい
$request->get('foo');

他にもたくさんあるのでドキュメントを眺めてみると楽しい。

関連ドキュメント

Controller (Symfony Docs)

Symfony\Component\HttpFoundation\Request | Symfony API

Symfony\Component\HttpFoundation\ParameterBag | Symfony API