Nette Documentation Preview

syntax
Réponse HTTP
************

.[perex]
Nette encapsule la réponse HTTP dans des objets avec une API compréhensible tout en fournissant un filtre de désinfection.

Une réponse HTTP est un objet [api:Nette\Http\Response], que vous obtenez en le passant en utilisant l'[injection de dépendances |dependency-injection:passing-dependencies]. Dans les présentateurs, il suffit d'appeler `$httpResponse = $this->getHttpResponse()`.

→ [Installation et exigences |@home#Installation]


Nette\Http\Réponse .[#toc-nette-http-response]
==============================================

Contrairement à [Nette\Http\Request |request], cet objet est mutable, donc vous pouvez utiliser des setters pour changer l'état, c'est-à-dire pour envoyer des en-têtes. Rappelez-vous que tous les setters **doivent être appelés avant l'envoi de toute sortie réelle.** La méthode `isSent()` indique si la sortie a été envoyée. Si elle renvoie `true`, chaque tentative d'envoyer un en-tête lève une exception `Nette\InvalidStateException`.


setCode(int $code, ?string $reason=null) .[method]
--------------------------------------------------
Modifie un [code de réponse |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10] d'état. Pour une meilleure lisibilité du code source, il est recommandé d'utiliser des [constantes prédéfinies |api:Nette\Http\IResponse] plutôt que des nombres réels.

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


getCode(): int .[method]
------------------------
Renvoie le code d'état de la réponse.


isSent(): bool .[method]
------------------------
Indique si les en-têtes ont déjà été envoyés du serveur au navigateur, de sorte qu'il n'est plus possible d'envoyer des en-têtes ou de modifier le code d'état.


setHeader(string $name, string $value) .[method]
------------------------------------------------
Envoie un en-tête HTTP et **supprime** l'en-tête du même nom envoyé précédemment.

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


addHeader(string $name, string $value) .[method]
------------------------------------------------
Envoie un en-tête HTTP et **n'écrase pas** l'en-tête du même nom envoyé précédemment.

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


deleteHeader(string $name) .[method]
------------------------------------
Supprime un en-tête HTTP précédemment envoyé.


getHeader(string $header): ?string .[method]
--------------------------------------------
Renvoie l'en-tête HTTP envoyé, ou `null` s'il n'existe pas. Le paramètre est insensible à la casse.

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


getHeaders(): array .[method]
-----------------------------
Renvoie tous les en-têtes HTTP envoyés sous forme de tableau associatif.

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


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
Envoie l'en-tête `Content-Type`.

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


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Redirige vers une autre URL. N'oubliez pas de quitter le script à ce moment-là.

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


setExpiration(?string $time) .[method]
--------------------------------------
Définit l'expiration du document HTTP utilisant les en-têtes `Cache-Control` et `Expires`. Le paramètre est soit un intervalle de temps (sous forme de texte), soit `null`, qui désactive la mise en cache.

```php
// le cache du navigateur expire dans une heure
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
La réponse doit être téléchargée avec la boîte de dialogue *Enregistrer sous* avec le nom spécifié. Elle n'envoie pas de fichier à la sortie.

```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]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Envoie un cookie. Valeurs par défaut des paramètres :

| `$path` | `'/'` | avec une portée à tous les chemins sur le (sous-)domaine *(configurable)*
| `$domain` | `null` | avec la portée du (sous-)domaine actuel, mais pas de ses sous-domaines *(configurable)*.
| `$secure` | `true` | si le site fonctionne en HTTPS, sinon `false` *(configurable)*
| `$httpOnly` | `true` | le cookie est inaccessible à JavaScript
| `$sameSite` | `'Lax'` | le cookie ne doit pas être envoyé en cas d'[accès depuis une autre origine |nette:glossary#SameSite cookie]

Vous pouvez modifier les valeurs par défaut des paramètres `$path`, `$domain` et `$secure` dans [configuration |configuration#HTTP cookie].

Le temps peut être spécifié comme un nombre de secondes ou une chaîne de caractères :

```php
$httpResponse->setCookie('lang', 'en', '100 days');
```

L'option `$domain` détermine quels domaines (origines) peuvent accepter les cookies. Si elle n'est pas spécifiée, le cookie est accepté par le même (sous-)domaine que celui qu'il a défini, à l'exclusion de leurs sous-domaines. Si `$domain` est spécifié, les sous-domaines sont également inclus. Par conséquent, spécifier `$domain` est moins restrictif que de l'omettre. Par exemple, si `$domain = 'nette.org'`, le cookie est également disponible sur tous les sous-domaines comme `doc.nette.org`.

Vous pouvez utiliser les constantes `Response::SameSiteLax`, `SameSiteStrict` et `SameSiteNone` pour la valeur `$sameSite`.


deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void .[method]
--------------------------------------------------------------------------------------------------------
Supprime un cookie. Les valeurs par défaut des paramètres sont :
- `$path` avec une portée à tous les répertoires (`'/'`)
- `$domain` avec la portée du (sous-)domaine actuel, mais pas de ses sous-domaines
- `$secure` est affecté par les paramètres de [configuration |configuration#HTTP cookie]

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

Réponse HTTP

Nette encapsule la réponse HTTP dans des objets avec une API compréhensible tout en fournissant un filtre de désinfection.

Une réponse HTTP est un objet Nette\Http\Response, que vous obtenez en le passant en utilisant l'injection de dépendances. Dans les présentateurs, il suffit d'appeler $httpResponse = $this->getHttpResponse().

Installation et exigences

Nette\Http\Réponse

Contrairement à Nette\Http\Request, cet objet est mutable, donc vous pouvez utiliser des setters pour changer l'état, c'est-à-dire pour envoyer des en-têtes. Rappelez-vous que tous les setters doivent être appelés avant l'envoi de toute sortie réelle. La méthode isSent() indique si la sortie a été envoyée. Si elle renvoie true, chaque tentative d'envoyer un en-tête lève une exception Nette\InvalidStateException.

setCode(int $code, ?string $reason=null)

Modifie un code de réponse d'état. Pour une meilleure lisibilité du code source, il est recommandé d'utiliser des constantes prédéfinies plutôt que des nombres réels.

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

getCode(): int

Renvoie le code d'état de la réponse.

isSent(): bool

Indique si les en-têtes ont déjà été envoyés du serveur au navigateur, de sorte qu'il n'est plus possible d'envoyer des en-têtes ou de modifier le code d'état.

setHeader(string $name, string $value)

Envoie un en-tête HTTP et supprime l'en-tête du même nom envoyé précédemment.

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

addHeader(string $name, string $value)

Envoie un en-tête HTTP et n'écrase pas l'en-tête du même nom envoyé précédemment.

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

deleteHeader(string $name)

Supprime un en-tête HTTP précédemment envoyé.

getHeader(string $header): ?string

Renvoie l'en-tête HTTP envoyé, ou null s'il n'existe pas. Le paramètre est insensible à la casse.

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

getHeaders(): array

Renvoie tous les en-têtes HTTP envoyés sous forme de tableau associatif.

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

setContentType(string $type, ?string $charset=null)

Envoie l'en-tête Content-Type.

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

redirect(string $url, int $code=self::S302_Found)void

Redirige vers une autre URL. N'oubliez pas de quitter le script à ce moment-là.

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

setExpiration(?string $time)

Définit l'expiration du document HTTP utilisant les en-têtes Cache-Control et Expires. Le paramètre est soit un intervalle de temps (sous forme de texte), soit null, qui désactive la mise en cache.

// le cache du navigateur expire dans une heure
$httpResponse->setExpiration('1 hour');

sendAsFile(string $fileName)

La réponse doit être téléchargée avec la boîte de dialogue Enregistrer sous avec le nom spécifié. Elle n'envoie pas de fichier à la sortie.

$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)

Envoie un cookie. Valeurs par défaut des paramètres :

$path '/' avec une portée à tous les chemins sur le (sous-)domaine (configurable)
$domain null avec la portée du (sous-)domaine actuel, mais pas de ses sous-domaines (configurable).
$secure true si le site fonctionne en HTTPS, sinon false (configurable)
$httpOnly true le cookie est inaccessible à JavaScript
$sameSite 'Lax' le cookie ne doit pas être envoyé en cas d'accès depuis une autre origine

Vous pouvez modifier les valeurs par défaut des paramètres $path, $domain et $secure dans configuration.

Le temps peut être spécifié comme un nombre de secondes ou une chaîne de caractères :

$httpResponse->setCookie('lang', 'en', '100 days');

L'option $domain détermine quels domaines (origines) peuvent accepter les cookies. Si elle n'est pas spécifiée, le cookie est accepté par le même (sous-)domaine que celui qu'il a défini, à l'exclusion de leurs sous-domaines. Si $domain est spécifié, les sous-domaines sont également inclus. Par conséquent, spécifier $domain est moins restrictif que de l'omettre. Par exemple, si $domain = 'nette.org', le cookie est également disponible sur tous les sous-domaines comme doc.nette.org.

Vous pouvez utiliser les constantes Response::SameSiteLax, SameSiteStrict et SameSiteNone pour la valeur $sameSite.

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

Supprime un cookie. Les valeurs par défaut des paramètres sont :

  • $path avec une portée à tous les répertoires ('/')
  • $domain avec la portée du (sous-)domaine actuel, mais pas de ses sous-domaines
  • $secure est affecté par les paramètres de configuration
$httpResponse->deleteCookie('lang');