レスポンス

Flightは、レスポンスのヘッダーの一部を生成するのを助けますが、ユーザーに返す内容の大部分はあなたがコントロールします。時にはResponseオブジェクトに直接アクセスすることもできますが、ほとんどの場合、Flightインスタンスを使用してレスポンスを送信します。

基本的なレスポンスを送信する

Flightはob_start()を使用して出力をバッファリングします。つまり、echoまたはprintを使用してユーザーにレスポンスを送信し、Flightがそれをキャプチャして適切なヘッダーと共にユーザーに送信します。


// これにより、「Hello、World!」がユーザーのブラウザに送信されます
Flight::route('/', function() {
    echo "Hello, World!";
});

// HTTP/1.1 200 OK
// Content-Type: text/html
//
// Hello, World!

代替として、write()メソッドを呼び出して本文に追加することもできます。


// これにより、「Hello、World!」がユーザーのブラウザに送信されます
Flight::route('/', function() {
    // 細かいですが、必要なときに仕事をする場合があります
    Flight::response()->write("Hello, World!");

    // この時点で設定した本文を取得したい場合
    // 次のようにします
    $body = Flight::response()->getBody();
});

ステータスコード

statusメソッドを使用して、レスポンスのステータスコードを設定できます:

Flight::route('/@id', function($id) {
    if($id == 123) {
        Flight::response()->status(200);
        echo "Hello, World!";
    } else {
        Flight::response()->status(403);
        echo "Forbidden";
    }
});

現在のステータスコードを取得したい場合は、引数なしでstatusメソッドを使用できます:

Flight::response()->status(); // 200

レスポンスヘッダーの設定

headerメソッドを使用して、レスポンスのコンテンツタイプなどのヘッダーを設定できます:


// これにより、「Hello、World!」がユーザーのブラウザにプレーンテキストで送信されます
Flight::route('/', function() {
    Flight::response()->header('Content-Type', 'text/plain');
    echo "Hello, World!";
});

JSON

Flightは、JSONおよびJSONPレスポンスを送信するためのサポートを提供します。JSONレスポンスを送信するには、JSONにエンコードするデータを渡します:

Flight::json(['id' => 123]);

JSONP

JSONPリクエストの場合、コールバック関数を定義するために使用するクエリパラメーター名をオプションで渡すことができます:

Flight::jsonp(['id' => 123], 'q');

そのため、?q=my_funcを使用してGETリクエストを行うと、次の出力が受信されるはずです:

my_func({"id":123});

クエリパラメーター名を渡さない場合、デフォルトでjsonpになります。

別のURLにリダイレクトする

redirect()メソッドを使用して、新しいURLを渡すことで現在のリクエストをリダイレクトできます:

Flight::redirect('/new/location');

デフォルトでは、FlightはHTTP 303("他を参照")ステータスコードを送信します。オプションでカスタムコードを設定できます:

Flight::redirect('/new/location', 401);

中止

いつでもhaltメソッドを呼び出すことで、フレームワークを停止できます:

Flight::halt();

オプションでHTTPステータスコードとメッセージを指定することもできます:

Flight::halt(200, 'Be right back...');

haltを呼び出すと、それまでのレスポンス内容が破棄されます。フレームワークを停止して現在のレスポンスを出力したい場合は、stopメソッドを使用します:

Flight::stop();

HTTPキャッシュ

Flightは、HTTPレベルのキャッシングのための組込みサポートを提供します。キャッシングの条件が満たされると、FlightはHTTP 304 Not Modifiedレスポンスを返します。クライアントが同じリソースを再リクエストするとき、ローカルにキャッシュされたバージョンを使用するよう促されます。

ルートレベルのキャッシング

全体のレスポンスをキャッシュしたい場合は、cache()メソッドを使用して時間を渡すことができます。


// これにより、レスポンスが5分間キャッシュされます
Flight::route('/news', function () {
  Flight::response()->cache(time() + 300);
  echo 'このコンテンツはキャッシュされます。';
});

// 代わりに、strtotime()メソッドに渡す文字列を使用することもできます
Flight::route('/news', function () {
  Flight::response()->cache('+5 minutes');
  echo 'このコンテンツはキャッシュされます。';
});

最終変更

lastModifiedメソッドを使用して、ページの最終変更日時を設定するためにUNIXタイムスタンプを渡すことができます。クライアントは、最終変更値が変更されるまでキャッシュを継続します。

Flight::route('/news', function () {
  Flight::lastModified(1234567890);
  echo 'このコンテンツはキャッシュされます。';
});

ETag

ETagキャッシングはLast-Modifiedと似ており、リソースに任意のIDを指定できます:

Flight::route('/news', function () {
  Flight::etag('my-unique-id');
  echo 'このコンテンツはキャッシュされます。';
});

lastModifiedまたはetagのいずれかを呼び出すと、キャッシュ値が設定およびチェックされます。リクエスト間でキャッシュ値が同じ場合、Flightは即座にHTTP 304レスポンスを送信して処理を停止します。