Phalcon

Phalconのレスポンスの返却

更新日:

今日は、Phalconのレスポンスの返却について調べてみます。

HTTPサイクルの一部は、クライアントへのレスポンスを返しています。Phalcon\Http\Responseは、このタスクを達成するために設計されたPhalconコンポーネントです。HTTPレスポンスは通常、ヘッダとボディで構成されている。以下は、基本的な使用方法の例です。

<?php
//レスポンスインスタンスの取得
 $response = new \Phalcon\Http\Response();
//ステータスコードのセット
 $response->setStatusCode(404, "Not Found");
//レスポンスのコンテンツをセット
 $response->setContent("Sorry, the page doesn't exist");
//レスポンスをクライアントへ送る
 $response->send();

フルMVCスタックを使用している場合は、手動でレスポンスを作成する必要はありません。しかしながら、あなたは、この例のように、コントローラのアクションから直接レスポンスを返すために必要がある場合は、次のとおりです。

<?php
class FeedController extends Phalcon\Mvc\Controller
 {
public function getAction()
 {
 // レスポンスインスタンスの取得
 $response = new \Phalcon\Http\Response();
$feed = //.. load here the feed
//レスポンスのコンテンツをセット
 $response->setContent($feed->asString());
//レスポンスを返す
 return $response;
 }
}

ヘッダでの作業

ヘッダは、HTTPレスポンスの重要な部分です。これは、HTTPステータス、レスポンスの種類とそれ以上のレスポンスステートに関する有用な情報が含まれています。

あなたは、次の方法でヘッダーを設定することができます。

<?php
//その名前でヘッダーをセット
$response->setHeader("Content-Type", "application/pdf");
$response->setHeader("Content-Disposition", 'attachment; filename="downloaded.pdf"');
//生のヘッダーをセット
$response->setRawHeader("HTTP/1.1 200 OK");

Phalcon\Http\Response\Headersのバッグは、内部ヘッダを管理します。このクラスは、クライアントに送信する前にヘッダを取得します。

<?php
//ヘッダーのバッグを取得
$headers = $response->getHeaders();
//その名前でヘッダーを取得
$contentType = $response->getHeaders()->get("Content-Type");

リダイレクト

Phalcon\Http\ResponseHTTPであなたは、一緒にリダイレクトを実行することができます。

<?php
//デフォルトのURIへリダイレクト
$response->redirect();
//ローカルベースのURIへリダイレクト
$response->redirect("posts/index");
//外部URLへリダイレクト
$response->redirect("http://en.wikipedia.org", true);
//特定のHTTPステータスコードへリダイレクト
$response->redirect("http://www.example.com/new-location", true, 301);

すべての内部URIは、(デフォルトのPhalcon\Mvc\Urlの)Urlサービスを使用して生成されます。この例では、アプリケーションで定義したルートを使用してリダイレクトすることのできる方法を示しています。

<?php
//名付けられたルートのベースにリダイレクト
return $response->redirect(array(
 "for" => "index-lang",
 "lang" => "jp",
 "controller" => "index"
));

リダイレクトが、ビューコンポーネントを無効にしないことに注意してください。現在のアクションでasociatedビューがあるように、それはとにかく実行されます。$this->view->disable()メソッドを実行して、コントローラからビューを無効にすることができます

HTTPキャッシュ

あなたのアプリケーションのパフォーマンスを向上させ、サーバーのトラフィックを削減する最も簡単な方法の一つは、HTTPキャッシュを使用することです。最近のほとんどのブラウザでは、HTTPキャッシュをサポートしています。HTTPキャッシュは、多くのウェブサイトが現在、高速な理由の一つです。

HTTPキャッシュは、初めてのページにサービスを提供する際にアプリケーションによって送信された以下のヘッダ値に変更することができます。

  • Expires:ページの有効期限がなければならないときに、このヘッダーを使用してアプリケーションがブラウザを伝える未来または過去の日付を設定することができます。
  • Cache-Control:このヘッダーはページがブラウザに新鮮な考慮すべきであるどのくらいの時間を指定することができます。
  • Last-Modified:このヘッダはサイトはページの再負荷を回避し、最後に更新された時間をブラウザに指示します。
  • ETag: ETagのは、現在のページの更新時刻を含んで作成する必要がある一意の識別子です

有効期限の設定

有効期限は、クライアント(ブラウザ)でページをキャッシュする最も簡単で効果的な方法の一つです。我々は追加現在の日付からの時間の開始ページがブラウザのキャッシュの保存されます。この日付の期限が切れるまでは、新しいコンテンツがサーバから要求されません。

<?php
$expireDate = new DateTime();
$expireDate->modify('+2 months');
$response->setExpires($expireDate);

Expiresヘッダーで期待どおりにレスポンスコンポーネントは、自動的にGMTタイムゾーンの日付を示しています。

私たちは過去の日付にこの値を設定する場合はブラウザが常に要求されたページが更新されます。

<?php
$expireDate = new DateTime();
$expireDate->modify('-10 minutes');
$response->setExpires($expireDate);

ブラウザは、この日付が経過したかどうかを評価するためには、クライアントの時計に依存しています。クライアントクロックページは、期限切れにするように変更することができ、これは、このキャッシュ·メカニズムの限界を表すことができます。

キャッシュコントロール

このヘッダーは提供ページをキャッシュするためのより安全な方法を提供します。我々は単にそれがキャッシュ内のページを保持する期間をブラウザに伝える時間を秒単位で指定する必要があります。

<?php
//今から、1日間のキャッシュを始めます。
$response->setHeader('Cache-Control', 'max-age=86400');
逆の効果は、(ページキャッシュを避けるため)このようにして達成されています。
<?php
//供給されたページをキャッシュしない
$response->setHeader('Cache-Control', 'private, max-age=0, must-revalidate');

Eタグ

「エンティティタグ」または「E-タグ」ページは、2つのリクエスト間で変更またはしていない場合、ブラウザが実現するのに役立つ一意の識別子です。識別子は、以前に提供されるコンテンツが変更された場合、これは変更する必要があることを考慮に入れて計算する必要があります。

<?php
//最新ニュースの修正時間に基づくEタグを計算
$recentDate = News::maximum(array('column' => 'created_at'));
$eTag = md5($recentDate);
//Eタグヘッダーを送信
$response->setHeader('E-Tag', $eTag);

本日は、以上です。

-Phalcon

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