HTTP レスポンス
Nette は HTTP レスポンスを分かりやすい API を持つオブジェクトにカプセル化します。
HTTP レスポンスは Nette\Http\Response
オブジェクトによって表されます。Nette
を使用している場合、このオブジェクトはフレームワークによって自動的に作成され、依存性注入
を使用して渡すことができます。Presenter では、単に $this->getHttpResponse()
メソッドを呼び出すだけです。
Nette\Http\Response
このオブジェクトは Nette\Http\Request
とは異なり、ミュータブル(可変)です。つまり、セッターを使用して状態を変更できます。例えば、ヘッダーを送信するなどです。すべてのセッターは、任意の出力が送信される前に呼び出す必要があることを忘れないでください。出力が既に送信されたかどうかは
isSent()
メソッドが示します。true
を返す場合、ヘッダーを送信しようとするたびに Nette\InvalidStateException
例外がスローされます。
setCode (int $code, ?string $reason=null)
レスポンスステータスコードを変更します。ソースコードの可読性を高めるために、コードには数値の代わりに事前定義された定数を使用することをお勧めします。
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
レスポンスのステータスコードを返します。
isSent(): bool
ヘッダーがサーバーからブラウザに既に送信されたかどうかを返します。したがって、ヘッダーを送信したり、ステータスコードを変更したりすることはできなくなります。
setHeader (string $name, string $value)
HTTP ヘッダーを送信し、以前に送信された同じ名前のヘッダーを上書きします。
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
HTTP ヘッダーを送信し、以前に送信された同じ名前のヘッダーを上書きしません。
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
以前に送信された HTTP ヘッダーを削除します。
getHeader (string $header): ?string
送信された HTTP ヘッダーを返すか、存在しない場合は null
を返します。パラメータは大文字と小文字を区別しません。
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
送信されたすべての HTTP ヘッダーを連想配列として返します。
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Content-Type
ヘッダーを変更します。
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
別の URL にリダイレクトします。その後、スクリプトを終了することを忘れないでください。
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Cache-Control
および Expires
ヘッダーを使用して HTTP
ドキュメントの有効期限を設定します。パラメータは時間間隔(テキストとして)または
null
で、キャッシュを無効にします。
// ブラウザのキャッシュは1時間後に期限切れになります
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
レスポンスは、指定された名前で 名前を付けて保存 ダイアログボックスを使用してダウンロードされます。ファイル自体は送信しません。
$httpResponse->sendAsFile('faktura.pdf');
setCookie (string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null)
クッキーを送信します。パラメータのデフォルト値:
$path |
'/' |
クッキーは(サブ)ドメイン内のすべてのパスに適用されます (設定可能) |
$domain |
null |
これは現在の(サブ)ドメインに適用されますが、そのサブドメインには適用されません (設定可能) |
$secure |
true |
ウェブサイトが HTTPS で実行されている場合、それ以外は false (設定可能) |
$httpOnly |
true |
クッキーは JavaScript からアクセスできません |
$sameSite |
'Lax' |
クッキーは他のドメインからのアクセス時に送信されない場合があります |
パラメータ $path
、$domain
、$secure
のデフォルト値は設定で変更できます。
時間は秒数または文字列として指定できます:
$httpResponse->setCookie('lang', 'cs', '100 days');
$domain
パラメータは、どのドメインがクッキーを受け入れることができるかを指定します。指定されていない場合、クッキーは設定したのと同じ(サブ)ドメインを受け入れますが、そのサブドメインは受け入れません。$domain
が指定されている場合、サブドメインも含まれます。したがって、$domain
を指定する方が、省略するよりも制限が緩くなります。例えば、$domain = 'nette.org'
の場合、クッキーは doc.nette.org
のようなすべてのサブドメインでも利用可能です。
$sameSite
の値には、定数
Response::SameSiteLax
、SameSiteStrict
、SameSiteNone
を使用できます。
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
クッキーを削除します。パラメータのデフォルト値は次のとおりです:
$path
すべてのディレクトリに適用されます('/'
)$domain
現在の(サブ)ドメインに適用されますが、そのサブドメインには適用されません$secure
は設定の設定に従います
$httpResponse->deleteCookie('lang');