Nette Documentation Preview

syntax
HTTP レスポンス
**********

.[perex]
Nette は HTTP レスポンスを分かりやすい API を持つオブジェクトにカプセル化します。

HTTP レスポンスは [api:Nette\Http\Response] オブジェクトによって表されます。Nette を使用している場合、このオブジェクトはフレームワークによって自動的に作成され、[依存性注入|dependency-injection:passing-dependencies] を使用して渡すことができます。Presenter では、単に `$this->getHttpResponse()` メソッドを呼び出すだけです。

→ [インストールと要件 |@home#インストール]


Nette\Http\Response
===================

このオブジェクトは [Nette\Http\Request|request] とは異なり、ミュータブル(可変)です。つまり、セッターを使用して状態を変更できます。例えば、ヘッダーを送信するなどです。すべてのセッターは、**任意の出力が送信される前に**呼び出す必要があることを忘れないでください。出力が既に送信されたかどうかは `isSent()` メソッドが示します。`true` を返す場合、ヘッダーを送信しようとするたびに `Nette\InvalidStateException` 例外がスローされます。


setCode(int $code, ?string $reason=null) .[method]
--------------------------------------------------
[レスポンスステータスコード|https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10]を変更します。ソースコードの可読性を高めるために、コードには数値の代わりに[事前定義された定数|api:Nette\Http\IResponse]を使用することをお勧めします。

```php
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
```


getCode(): int .[method]
------------------------
レスポンスのステータスコードを返します。


isSent(): bool .[method]
------------------------
ヘッダーがサーバーからブラウザに既に送信されたかどうかを返します。したがって、ヘッダーを送信したり、ステータスコードを変更したりすることはできなくなります。


setHeader(string $name, string $value) .[method]
------------------------------------------------
HTTP ヘッダーを送信し、以前に送信された同じ名前のヘッダーを**上書き**します。

```php
$httpResponse->setHeader('Pragma', 'no-cache');
```


addHeader(string $name, string $value) .[method]
------------------------------------------------
HTTP ヘッダーを送信し、以前に送信された同じ名前のヘッダーを**上書きしません**。

```php
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
```


deleteHeader(string $name) .[method]
------------------------------------
以前に送信された HTTP ヘッダーを削除します。


getHeader(string $header): ?string .[method]
--------------------------------------------
送信された HTTP ヘッダーを返すか、存在しない場合は `null` を返します。パラメータは大文字と小文字を区別しません。

```php
$pragma = $httpResponse->getHeader('Pragma');
```


getHeaders(): array .[method]
-----------------------------
送信されたすべての HTTP ヘッダーを連想配列として返します。

```php
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
```


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
`Content-Type` ヘッダーを変更します。

```php
$httpResponse->setContentType('text/plain', 'UTF-8');
```


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
別の URL にリダイレクトします。その後、スクリプトを終了することを忘れないでください。

```php
$httpResponse->redirect('http://example.com');
exit;
```


setExpiration(?string $time) .[method]
--------------------------------------
`Cache-Control` および `Expires` ヘッダーを使用して HTTP ドキュメントの有効期限を設定します。パラメータは時間間隔(テキストとして)または `null` で、キャッシュを無効にします。

```php
// ブラウザのキャッシュは1時間後に期限切れになります
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
レスポンスは、指定された名前で *名前を付けて保存* ダイアログボックスを使用してダウンロードされます。ファイル自体は送信しません。

```php
$httpResponse->sendAsFile('invoice.pdf');
```


setCookie(string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null) .[method]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
クッキーを送信します。パラメータのデフォルト値:

| `$path`     | `'/'`   | クッキーは(サブ)ドメイン内のすべてのパスに適用されます *(設定可能)*
| `$domain`   | `null`  | これは現在の(サブ)ドメインに適用されますが、そのサブドメインには適用されません *(設定可能)*
| `$secure`   | `true`  | ウェブサイトが HTTPS で実行されている場合、それ以外は `false` *(設定可能)*
| `$httpOnly` | `true`  | クッキーは JavaScript からアクセスできません
| `$sameSite` | `'Lax'` | クッキーは[他のドメインからのアクセス |nette:glossary#SameSite cookie]時に送信されない場合があります

パラメータ `$path`、`$domain`、`$secure` のデフォルト値は[設定 |configuration#HTTP クッキー]で変更できます。

時間は秒数または文字列として指定できます:

```php
$httpResponse->setCookie('lang', 'ja', '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 .[method]
--------------------------------------------------------------------------------------------------------
クッキーを削除します。パラメータのデフォルト値は次のとおりです:
- `$path` すべてのディレクトリに適用されます(`'/'`)
- `$domain` 現在の(サブ)ドメインに適用されますが、そのサブドメインには適用されません
- `$secure` は[設定 |configuration#HTTP クッキー]の設定に従います

```php
$httpResponse->deleteCookie('lang');
```

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('invoice.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', 'ja', '100 days');

$domain パラメータは、どのドメインがクッキーを受け入れることができるかを指定します。指定されていない場合、クッキーは設定したのと同じ(サブ)ドメインを受け入れますが、そのサブドメインは受け入れません。$domain が指定されている場合、サブドメインも含まれます。したがって、$domain を指定する方が、省略するよりも制限が緩くなります。例えば、$domain = 'nette.org' の場合、クッキーは doc.nette.org のようなすべてのサブドメインでも利用可能です。

$sameSite の値には、定数 Response::SameSiteLaxSameSiteStrictSameSiteNone を使用できます。

deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null)void

クッキーを削除します。パラメータのデフォルト値は次のとおりです:

  • $path すべてのディレクトリに適用されます('/'
  • $domain 現在の(サブ)ドメインに適用されますが、そのサブドメインには適用されません
  • $secure設定の設定に従います
$httpResponse->deleteCookie('lang');