HTTP-Antwort
Nette kapselt die HTTP-Antwort in Objekte mit einer verständlichen API.
Die HTTP-Antwort wird durch das Objekt Nette\Http\Response repräsentiert. Wenn Sie mit Nette
arbeiten, wird dieses Objekt automatisch vom Framework erstellt und Sie können es sich mittels Dependency Injection übergeben lassen. In
Presentern reicht es aus, die Methode $this->getHttpResponse()
aufzurufen.
→ Installation und Anforderungen
Nette\Http\Response
Das Objekt ist im Gegensatz zu Nette\Http\Request mutable, d.h. Sie können
den Zustand mithilfe von Settern ändern, z. B. Header senden. Vergessen Sie nicht, dass alle Setter vor dem Senden jeglicher
Ausgabe aufgerufen werden müssen. Ob bereits eine Ausgabe gesendet wurde, verrät die Methode isSent()
. Wenn sie
true
zurückgibt, löst jeder Versuch, einen Header zu senden, eine Ausnahme
Nette\InvalidStateException
aus.
setCode (int $code, ?string $reason=null)
Ändert den Antwort-Statuscode. Zur besseren Lesbarkeit des Quellcodes empfehlen wir, für den Code statt Zahlen vordefinierte Konstanten zu verwenden.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Gibt den Statuscode der Antwort zurück.
isSent(): bool
Gibt zurück, ob bereits Header vom Server an den Browser gesendet wurden und es daher nicht mehr möglich ist, Header zu senden oder den Statuscode zu ändern.
setHeader (string $name, string $value)
Sendet einen HTTP-Header und überschreibt einen zuvor gesendeten Header mit demselben Namen.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Sendet einen HTTP-Header und überschreibt nicht einen zuvor gesendeten Header mit demselben Namen.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Löscht einen zuvor gesendeten HTTP-Header.
getHeader (string $header): ?string
Gibt den gesendeten HTTP-Header zurück oder null
, wenn keiner existiert. Der Parameter ist case-insensitive.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Gibt alle gesendeten HTTP-Header als assoziatives Array zurück.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Ändert den Content-Type
-Header.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Leitet zu einer anderen URL weiter. Vergessen Sie nicht, das Skript danach zu beenden.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Legt die Ablaufzeit des HTTP-Dokuments mithilfe der Header Cache-Control
und Expires
fest. Der
Parameter ist entweder ein Zeitintervall (als Text) oder null
, was das Caching deaktiviert.
// Cache im Browser läuft in einer Stunde ab
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
Die Antwort wird über das Dialogfeld Speichern unter unter dem angegebenen Namen heruntergeladen. Die Datei selbst wird dabei nicht gesendet.
$httpResponse->sendAsFile('rechnung.pdf');
setCookie (string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null)
Sendet ein Cookie. Standardwerte der Parameter:
$path |
'/' |
Cookie ist für alle Pfade in der (Sub-)Domain gültig (konfigurierbar) |
$domain |
null |
bedeutet Gültigkeit für die aktuelle (Sub-)Domain, aber nicht deren Subdomains (konfigurierbar) |
$secure |
true |
wenn die Website über HTTPS läuft, sonst false (konfigurierbar) |
$httpOnly |
true |
Cookie ist für JavaScript unzugänglich |
$sameSite |
'Lax' |
Cookie muss möglicherweise nicht beim Zugriff von einer anderen Domain gesendet werden |
Die Standardwerte der Parameter $path
, $domain
und $secure
können Sie in der Konfiguration ändern.
Die Zeit kann als Anzahl von Sekunden oder als String angegeben werden:
$httpResponse->setCookie('lang', 'cs', '100 days');
Der Parameter $domain
bestimmt, welche Domains Cookies akzeptieren können. Wenn er nicht angegeben ist,
akzeptiert die gleiche (Sub-)Domain, die das Cookie gesetzt hat, aber nicht deren Subdomains, das Cookie. Wenn
$domain
angegeben ist, sind auch Subdomains enthalten. Daher ist die Angabe von $domain
weniger
restriktiv als das Weglassen. Zum Beispiel sind bei $domain = 'nette.org'
Cookies auch auf allen Subdomains wie
doc.nette.org
verfügbar.
Für den Wert $sameSite
können Sie die Konstanten Response::SameSiteLax
, SameSiteStrict
und SameSiteNone
verwenden.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Löscht ein Cookie. Standardwerte der Parameter sind:
$path
mit Gültigkeit für alle Verzeichnisse ('/'
)$domain
mit Gültigkeit für die aktuelle (Sub-)Domain, aber nicht deren Subdomains$secure
richtet sich nach den Einstellungen in der Konfiguration
$httpResponse->deleteCookie('lang');