リクエスト情報の取得
Requestクラス
AbstractActionControllerを継承したクラスでは、$this->getRequest()でZend\Http\PhpEnvironment\Requestクラスのインスタンスが得られます。このクラスには、クライアントのリクエスト情報が集約されており、メソッドを通してリクエスト情報の取得ができます。
GET,POST
HTTPのGETメソッドやPOSTメソッドでクライアントがパラメーターを送信する場合、フォームやURLに埋め込んで送信されてきます。
これらの送信されてきたGET,POSTの値を参照するにはスーパーグローバル変数である$_GETや$_POSTがあるわけですが、Zend2ではRequestクラスを利用します。
// 全てのPOSTパラメーターを配列で取得 $postParams = $this->getRequest()->getPost(); // キー指定で特定のPOSTパラメーターを取得 $hoge= $this->getRequest()->getPost('hoge'); // 全てのGETパラメーターを配列で取得 $getParams = $this->getRequest()->getQuery(); // キー指定で特定のGETパラメーターを取得 $hoge= $this->getRequest()->getQuery('hoge');
もう一つの方法として、コントローラーで$this->params()->fromPost()といような形で、Paramsプラグインを利用した取得方法もありますが、これも内部で$this->getRequest()->getPost()しているだけなので、実質的にはどちらでも同じです。
// 全てのPOSTパラメーターを配列で取得 $postParams = $this->params()->fromPost(); // キー指定で特定のPOSTパラメーターを取得 $hoge= $this->params()->fromPost('hoge'); // 全てのGETパラメーターを配列で取得 $getParams = $this->params()->fromQuery(); // キー指定で特定のGETパラメーターを取得 $hoge= $this->params()->fromQuery('hoge');
リクエストURL
アプリケーションの中で、リクエストされたURLを参照したい場合もあると思います。例えばアクセスログとしてURLを出力したい場合など。
それにはgetUriStringメソッドを利用します。
$url = $this->getRequest()->getUriString();
サーバー変数
ApacheなどのWebサーバーソフトウェアで生成される各種情報の取得にはgetServer()メソッドを利用します。PHPでは$_SERVERで取得可能ですが、Zend2ではこれを直接参照するのではなく、Requestクラスを通して参照します。
// 全てのサーバー変数を配列で取得 $serverVars = $this->getRequest()->getServer(); // 特定のサーバー変数を取得 $clientIp = $this->getRequest()->getServer('REMOTE_ADDR');
環境変数
PHPの環境変数の取得も可能です。環境変数は$_ENVという連想配列で参照可能ですが、これも、直接参照するのではなくRequestクラスを通して取得します。
環境変数は、.htaccessなどで定義するなどしたユーザー定義情報です。
SetEnv APPLICATION_ENV product
// 全ての環境変数を配列で取得 $envVars = $this->getRequest()->getEnv(); // 特定の環境変数を取得 $appEnv = $this->getRequest()->getEnv('APPLICATION_ENV');
アップロードファイル情報
PHPでアップロードファイルを処理する場合、$_FILEというグローバル変数を利用します。Zend2ではこれもRequestクラスに隠蔽されています。
// 全てのアップロードファイル情報を取得 $files= $this->getRequest()->getFiles(); // 特定のnameのアップロードファイル情報を取得 $thumbnail = $this->getRequest()->getFiles('thumbnail');
非同期リクエストか否か
最近はAjaxベースのインターフェイスを持つサイトが増えてきました。AjaxはJavascriptから非同期にサーバーへリクエストしてレスポンスを得る仕組みですが、サーバーサイドスクリプトでは、このAjaxによるアクセスかどうかで処理を切り分けるような事はよくあるとおもいます。例えばAjaxでのリクエストを想定したアクションメソッドの場合は、ブラウザからの直接のアクセスは拒否するなど。このAjaxによるリクエストかどうかの判定はリクエストヘッダ情報に含まれるフラグで可能ですが、これを隠蔽しているのがRequestクラスのisXmlHttpRequestメソッドです。
// Ajaxによるリクエストか否かの判定 if ($this->getRequest()->isXmlHttpRequest()) { }