レスポンス

Response オブジェクトはクライアントにどのようなwebレスポンスを送るのかを表します。 HTTPレスポンスそのものではありません。 その代わりHTTPレスポンスを組み立ててるため必要なヒントがセットになっています。

_Response_オブジェクトに値をセットすればクライントに値が送られるわけではありません。 _Response_は出力されることなしに正しい値がセットされてるかを検査することができます。

_Response_オエブジェクトはDIで取得できます。

<?php
$di->get('aura/web-kernel:response');

// あるいは他のクラスにインジェクトできるように
$di->lazyGet('aura/web-kernel:response');

_Response_オブジェクトはレスポンスの要素をプロパティで表します。

  • $response->status はステータスコード、ステタースフレーズ、それにHTTPバージョンを表します。

  • $response->headers クッキー以外のヘッダーです。

  • $response->cookies クッキーのヘッダーです。

  • $response->content はレスポンスのコンテンツを表します。content typeや、charset、disposition、filenameなどに便利です。

  • $response->cacheキャッシュヘッダーに便利なメソッドです。

  • $response->redirect LocationとStatusに使われます。

ステータス

$response->statusオブジェクトは以下のように使われます。

<?php
// ステータスコードとメッセージ、それにバージョンを一度にセット
$response->status->set('404', 'Not Found', '1.1');

// 個別にセット
$response->status->setCode('404');
$response->status->setPhrase('Not Found');
$response->status->setVersion('1.1');

// ステータスを(メッセージを含めて)取得
$status = $response->status->get(); // "HTTP/1.1 404 Not Found"

// 値を個別に取得
$code    = $response->status->getCode();
$phrase  = $response->status->getPhrase();
$version = $response->status->getVersion();
?>

ヘッダー

$response->headersオブジェクトは以下のメソッドがあります。

  • set()は以前にセットされていた1つの値をリセットし、ヘッダーをセットします。

  • get() は1つのあるいは全てのヘッダーを取得します。

<?php
// X-Header-Value: foo
$response->headers->set('X-Header-Value', 'foo');

// X-Header-Valueを取得
$value = $response->headers->get('X-Header-Value');

// 全てのヘッダーを取得
$all_headers = $response->headers->get();
?>

ヘッダーの値をnull、falseあるいは空の文字列をセットするとヘッダーから取り除かれます。0にセットするのでは除かれません

クッキー

$response->cookiesオブジェクトは以下のメソッドを持ちます。

  • setExpire()はクッキーのデフォルトの有効期限をセットします。

  • setPath() はクッキーのデフォルトのパスをセットします。

  • setDomain() はクッキーのデフォルトのドメインをセットします。

  • setSecure() はクッキーのデフォルトのセキュリティーをセットします。

  • setHttpOnly()はクッキーがHTTPによってのみ送られるかのデフォルトをセットします。

  • set() クッッキーの名前と値をメタデータと共にセットします。これはPHPの関数setcookie()を真似たものです。 もしメタデータの値で、path、domain、secure、それにhttponlyが指定されていないとデフォルトの値が使われます。

  • get() 名前でクッキーを返すか、全てのクッキーを一度に返します。

<?php
// 特定のドメインとパスが10分で切れるようにセット
$response->cookies->setDomain('example.com');
$response->cookies->setPath('/');
$response->cookies->setExpire('+600');

// 2つのクッキーをセット
$response->cookies->set('foo', 'bar');
$response->cookies->set('baz', 'dib');

// レスポンスからクッキー情報の配列を取得
$foo_cookie = $response->cookies->get('foo');

// 名前をキーにしたクッキー情報配列を全て取得
$cookies = $response->cookies->get();
?>

クッキー情報配列はこのようなものです。

<?php
$cookies['foo'] = array(
    'value' => 'bar',
    'expire' => '+600', // UNIXタイムスタンプにstrtotime()を足した値です。
    'path' => '/',
    'domain' => 'example.com',
    'secure' => false,
    'httponly' => true,
);
?>

コンテンツ

$response->contentオブジェクトはレスポンスコンテントとレスポンスヘッダーのための便利なメソッドを持っています。

  • set() レスポンスのコテント本体をセットします。(配列やcallable、オブジェクト、あるいは文字列なんでも構いません。適切に変換されます)

  • get()set()でセットされたレスポンスのコンテンツ本体を取得します。

  • setType()Content-Typeヘッダーをセットします。

  • getType()Content-Typeを取得します。(charsetは含まれません)

  • setCharset()Content-Typeをのためのcharacter setをセットします。

  • getCharset()Content-Typeヘッダーのcharsetの部分を取得します。

  • setDisposition()Content-Dispositionタイプとファイル名をセットします。

  • setEncoding()Content-Encodingヘッダーをセットします。

<?php
// set the response content, type, and charset
$response->content->set(array('foo' => 'bar', 'baz' => 'dib'));
$response->content->setType('application/json');

// elsewhere, before sending the response, modify the content based on type
switch ($response->content->getType()) {
    case 'application/json':
        $json = json_encode($response->content->get());
        $response->content->set($json);
        break;
    // ...
}
?>

キャッシュ

$response->cacheオブジェクトはHTTPキャッシュヘッダーのいくつかの便利なメソッドを持っています。

  • reset() は全てのキャッシュ関連のヘッダーを取り除きます。

  • disable() は全てのキャッシュ関連のヘッダーを取り除き、以下をセットします。

      Cache-Control: max-age=0, no-cache, no-store, must-revalidate, proxy-revalidate
      Expires: Mon, 01 Jan 0001 00:00:00 GMT
      Pragma: no-cache
    
  • setAge() は秒を単位とするAgeヘッダーをセットします。

  • setControl()は一度にCache-Controlヘッダーの配列全てをセットするかわりに、個別の方法の設定をセットします。

    • setPublic()setPrivate()publicprivateのキャッシュコントロールをセットします。(片方の機能をオフにします)

    • setMaxAge()setSharedMaxAge()max-ages-maxageを指定します。(nullかfalseを取り除くためにセットします)

    • setNoCache()setNoStore()no-cacheno-storeキを指定します。(nullかfalseを取り除くためにセットします)

    • setMustRevalidate()setProxyRevalidate()must-revalidateproxy-revalidateを指定します。 (nullかfalseを取り除くためにセットします)

  • setEtag()setWeakEtag()ETagヘッダーの値をセットします。

  • setExpires()Expiresヘッダーの値をセットします。日付やDateTimeオブジェクトは適切にフォーマットされたHTTP日付に変換されます。

  • setLastModified()Last-Modifiedヘッダーの値をセットします。日付やDateTimeオブジェクトは適切にフォーマットされたHTTP日付に変換されます。

  • setVary()Varyヘッダーをセットします。コンマで分けられた配列を渡します。

キャッシュヘッダーについてさらにお知りになりたいときはPalizineHTTP 1.1 headers specの記述をご覧ください。

リダイレクト

$response->redirectオブジェクトはリダイレクトのためのLocationヘッダーのいくつかの便利なメソッドを持っています。

  • to($location, $code = 302, phrase = null)はリダイレクトのためのステータスと任意のヘッダー、メッセージをセットします。

  • afterPost($location)$location303 See Otherステータスでリダイレクトします。これは自動的にHTTPキャッシュを無効にします。

  • created($location)201 Created$locationにリダイレクトします。

  • movedPermanently($location)301 Moved Permanently$locationにリダイレクトします。

  • found($location)302 Found$locationにリダイレクトします。

  • seeOther($location)303 See Other$locationにリダイレクトします。これは自動的にHTTPキャッシュを無効にします。

  • temporaryRedirect($location)307 Temporary Redirect$locationにリダイレクトします。

  • permanentRedirect($location)308 Permanent Redirect$locationにリダイレクトします。