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()
.
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');