Réponse HTTP

Nette encapsule la réponse HTTP dans des objets avec une API compréhensible.

La réponse HTTP est représentée par l'objet Nette\Http\Response. Si vous travaillez avec Nette, cet objet est automatiquement créé par le framework et vous pouvez vous le faire passer via l'injection de dépendances. Dans les presenters, il suffit d'appeler la méthode $this->getHttpResponse().

Installation et prérequis

Nette\Http\Response

L'objet, contrairement à Nette\Http\Request, est mutable, c'est-à-dire qu'à l'aide de setters, vous pouvez modifier l'état, par exemple envoyer des en-têtes. N'oubliez pas que tous les setters doivent être appelés avant l'envoi de toute sortie. La méthode isSent() indique si la sortie a déjà été envoyée. Si elle retourne true, toute tentative d'envoi d'un en-tête lèvera une exception Nette\InvalidStateException.

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

Modifie le code de statut de la réponse. Pour une meilleure lisibilité du code source, nous recommandons d'utiliser des constantes prédéfinies pour le code au lieu de chiffres.

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

getCode(): int

Retourne le code de statut de la réponse.

isSent(): bool

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

setHeader (string $name, string $value)

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

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

addHeader (string $name, string $value)

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

$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

Retourne un 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

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

Modifie 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 terminer ensuite le script.

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

setExpiration (?string $time)

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

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

sendAsFile (string $fileName)

La réponse sera téléchargée via la boîte de dialogue Enregistrer sous sous le nom spécifié. Le fichier lui-même n'est pas envoyé.

$httpResponse->sendAsFile('facture.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 '/' le cookie a une portée sur tous les chemins du (sous-)domaine (configurable)
$domain null ce qui signifie avec une portée sur le (sous-)domaine actuel, mais pas 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 peut ne pas être envoyé lors d'un accès depuis un domaine différent

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

Le temps peut être spécifié en secondes ou sous forme de chaîne de caractères :

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

Le paramètre $domain détermine quels domaines peuvent accepter le cookie. S'il n'est pas spécifié, le cookie est accepté par le même (sous-)domaine qui l'a défini, mais pas par ses 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, avec $domain = 'nette.org', les cookies sont également disponibles sur tous les sous-domaines comme doc.nette.org.

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

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 sur tous les répertoires ('/')
  • $domain avec une portée sur le (sous-)domaine actuel, mais pas ses sous-domaines
  • $secure est régi par les paramètres de la configuration
$httpResponse->deleteCookie('lang');
version: 4.0