Symfony2 Request クラス 使い方
Requestクラスの使い方を解説していきます。
RequestクラスはSymfony2のHttpFoundationコンポーネントに含まれており、HTTPリクエストに関する情報(リクエストパラメータやヘッダ、セッションなど)へアクセスするためのAPIを提供します。
HttpFoundation・・・・・HTTPを扱うオブジェクト(Requestクラス、Responseクラス、Sessionクラス)
Requestの生成
Requestの生成はフロントコントローラ(app.php/app_dev.php)にて行われます。Request::createFromGlobals()メソッドが呼び出されると、内部でスーパーグローバル変数を元にRequestが生成されます。
1 | $kernel->handle(Request::createFromGlobals())->send(); |
環境変数やリクエストパラメータへのアクセス
フレームワークでない素のPHPでは$_GETや$_POSTといったスーパーグローバル変数へアクセスして環境変数を取得しますが、Requestオブジェクトを用いた場合はParameterBagというオブジェクトを経由して取得します。
スーパーグローバル変数との対応は次の通りです。
・request – $_POST
・query – $_GET
・cookies – $_COOKIE
・files – $_FILE
・server – $_SERVER
・headers – $_SERVER
・Session – $_SESSION
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php // $_GET['hoge'] $request->query->get('hoge'); // $_POST['hoge'] $request->request->get('hoge'); // ルーティングパラメータ / ex) @Route('/{hoge}') $request->attributes->get('hoge'); // $_COOKIE['hoge'] $request->cookies->get('hoge'); // $_FILES['hoge'] $request->files->get('hoge'); // $_SERVER['SCRIPT_FILENAME'] $request->server->get('SCRIPT_FILENAME'); // $_SERVER['HTTP_USER_AGENT'] $request->headers->get('User-Agent'); // query > attribute > request の順で検索 $request->get('hoge'); |
Sessionの操作
セッションはSessionオブジェクトを経由してアクセスします。
Request::getSession()メソッドで取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $session = $request->getSession(); $session->has('hoge.bar'); $session->set('hoge.bar', 'value'); $value = $session->get('hoge.bar'); $session->remove('hoge.bar'); $session->clear(); $session->setFlash('notice', 'value'); $value = $session->getFlash('notice'); $session->getId(); // IDを変更 $session->migrate(); // 中身をクリアしてIDを変更 $session->invalidate(); |
URLの取得
URLの取得もRequestを使って取得できます。
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 | <?php // http://sample.jp:8080/my_website/app_dev.php/demo?foo=bar $request->getUri(); // http $request->getScheme(); // sample.jp $request->getHost(); // 8080 $request->getPort(); // sample.jp:8080 $request->getHttpHost(); // /my_website $request->getBasePath(); // /my_website/app_dev.php $request->getBaseUrl(); // /demo $request->getPathInfo(); // foo=bar $request->getQueryString(); // http://sample.jp:8080/my_website/app_dev.php/foobar $request->getUriForPath('/foobar'); |
参考サイト
http://api.symfony.com/2.2/Symfony/Component/HttpFoundation/Request.html#method_getBasePath
Author Profile
スターフィールド編集部
SHARE