Phalcon

PhalconのHTTPリクエスト

更新日:

今日は、PhalconのHTTPリクエストについて調べてみます。

(通常はブラウザによって発信)すべてのHTTPリクエストのWebベースのアプリケーションは、リクエスト元への正しいレスポンスを提供するために、ヘッダデータ、ファイル、変数、などには、リクエストに関するその情報を解析するのに必要な追加情報が含まれています。Phalcon\Http\Requestは、オブジェクト指向の方法でそれにアクセスできるように、リクエストの情報をカプセル化します。

<?php
// リクエストインスタンスの取得
$request = new \Phalcon\Http\Request();
// リクエストがPOSTメソッドでなされたかどうかをチェック
if ($request->isPost() == true) {
// リクエストがAjaxでなされたかどうかをチェック
 if ($request->isAjax() == true) {
 echo "Request was made using POST and AJAX";
 }
}

値の取得

PHPは自動的にスーパーグローバル配列のリクエストの種類に応じて、$ _GETと$ _POSTを埋めます。これらの配列はフォームまたはURLを介して送信されたパラメータに存在する値が含まれています。配列内の変数は、サニタイズ(消毒)されることはありませんので、不正な文字が含まれている可能性のある悪意のあるコードによって、SQLインジェクションや、クロスサイトスクリプティング(XSS)攻撃にさらされます。

Phalcon\Http\Requestは、$_REQUEST、$_GETと$_POST配列に格納された値にアクセスし、サニタイズ(消毒)または(デフォルトのPhalcon\Filter)による「filter」サービスで、それらをフィルタリングすることができます。次の例では、同じ動作を提供しています:

<?php
// フィルタを手動で適用
$filter = new Phalcon\Filter();
$email = $filter->sanitize($_POST["user_email"], "email");
// 値へのフィルターを手動で適用
$filter = new Phalcon\Filter();
$email = $filter->sanitize($request->getPost("user_email"), "email");
// フィルタを自動的に適用
$email = $request->getPost("user_email", "email");
// パラメータがNULLなら、デフォルト値をセット
$email = $request->getPost("user_email", "email", "some@example.com");
// パラメータがフィルタリングされずにNULLなら、デフォルト値をセット
$email = $request->getPost("user_email", null, "some@example.com");

コントローラからリクエストへのアクセス

リクエスト環境にアクセスするための最も一般的な場所は、コントローラのアクションである。Phalcon\Http\Requetオブジェクトからアクセスするには、あなたは、コントローラのパブリックプロパティである$this->requestを使用する必要があります:

<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
 {
}
public function saveAction()
 {
// リクエストがPOSTで作成されたかどうかチェック
 if ($this->request->isPost() == true) {
// POSTデータにアクセス
 $customerName = $this->request->getPost("name");
 $customerBorn = $this->request->getPost("born");
}
}
}

ファイルのアップロード

別の一般的なタスクは、ファイルのアップロードです。Phalocn\Http\Requestは、このタスクを達成するためのオブジェクト指向の方法を提供します:

<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function uploadAction()
 {
 // アップロードされたファイルがあるかどうかチェック
 if ($this->request->hasFiles() == true) {
// 実際のファイル名とサイズを出力
 foreach ($this->request->getUploadedFiles() as $file) {
//ファイル詳細の出力
 echo $file->getName(), " ", $file->getSize(), "\n";
//ファイルをアプリケーションへ移動
 $file->moveTo('files/' . $file->getName());
 }
 }
 }
}

phalcon\Http\Request::getUploadedFiles()によって返された各オブジェクトは、Phalcon\Http\Request\Fileクラスのインスタンスです。$_FILESスーパーグローバル配列を使用するのと、同じ動作を提供しています。Phalcon\Http\Request\Fileは、リクエストと一緒にアップロードされた各ファイルに関連する情報だけをカプセル化します。

HTTPヘッダの利用

前述したように、リクエストヘッダは、私たちは戻って、ユーザーに適切な応答を送信できるように有用な情報が含まれている。以下の例は、その情報の使用方法を示しています。

<?php
// Http-X-Requested-Withヘッダーを取得
$requestedWith = $response->getHeader("HTTP_X_REQUESTED_WITH");
if ($requestedWith == "XMLHttpRequest") {
 echo "The request was made with Ajax";
}
//上記と同じ
if ($request->isAjax()) {
 echo "The request was made with Ajax";
}
//リクエストレイヤーをチェック
if ($request->isSecureRequest() == true) {
 echo "The request was made using a secure layer";
}
// サーバーのIPアドレスを取得(例:192.168.0.100)
$ipAddress = $request->getServerAddress();
// クライアントのIPアドレスを取得(例:201.245.53.51)
$ipAddress = $request->getClientAddress();
// ユーザーエージェントを取得 (HTTP_USER_AGENT)
$userAgent = $request->getUserAgent();
// ブラウザで最高のアクセス可能なコンテンツ(例:text/xml)
$contentType = $request->getAcceptableContent();
// ブラウザでアクセ可能なベストのcharsetを取得(例:utf-8)
$charset = $request->getBestCharset();
// ブラウザで許容されているベストなlanguage(例:en-us)
$language = $request->getBestLanguage();

本日は、以上です。

-Phalcon

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.