HTTP-Antwort
Nette kapselt die HTTP-Antwort in Objekte mit einer verständlichen API und bietet gleichzeitig einen Bereinigungsfilter.
Eine HTTP-Antwort ist ein Nette\Http\Response -Objekt,
das Sie erhalten, indem Sie es mittels Dependency
Injection übergeben. In Moderatoren rufen Sie einfach $httpResponse = $this->getHttpResponse()
auf.
→ Installation und Anforderungen
Nette\Http\Response
Im Gegensatz zu Nette\Http\Request ist dieses Objekt veränderbar, so dass
Sie Setter verwenden können, um den Status zu ändern, d.h. um Header zu senden. Denken Sie daran, dass alle Setter aufgerufen
werden müssen, bevor die eigentliche Ausgabe gesendet wird. Die Methode isSent()
zeigt an, ob die Ausgabe
gesendet wurde. Wenn sie true
zurückgibt, löst jeder Versuch, eine Kopfzeile zu senden, eine
Nette\InvalidStateException
Ausnahme aus.
setCode (int $code, string $reason=null)
Ändert einen Status-Antwort-Code. Zur besseren Lesbarkeit des Quellcodes wird empfohlen, vordefinierte Konstanten anstelle von tatsächlichen Zahlen 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, so dass es nicht mehr möglich ist, Header zu senden oder den Statuscode zu ändern.
setHeader (string $name, string $value)
Sendet einen HTTP-Header und überschreibt den zuvor gesendeten Header mit demselben Namen.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Sendet einen HTTP-Header und überschreibt nicht den zuvor gesendeten Header gleichen Namens.
$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 er nicht existiert. Der Parameter unterscheidet nicht
zwischen Groß- und Kleinschreibung.
$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)
Sendet den Header Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Leitet zu einer anderen URL um. Vergessen Sie nicht, das Skript dann zu beenden.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Legt das Verfallsdatum des HTTP-Dokuments unter Verwendung der Header Cache-Control
und Expires
fest.
Der Parameter ist entweder ein Zeitintervall (als Text) oder null
, was das Caching deaktiviert.
// Browser-Cache läuft in einer Stunde ab
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
Die Antwort sollte mit dem Dialog Speichern unter mit dem angegebenen Namen heruntergeladen werden. Es wird keine Datei selbst zur Ausgabe gesendet.
$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)
Sendet ein Cookie. Standard-Parameterwerte:
$path |
'/' |
mit Geltungsbereich auf alle Pfade der (Sub-)Domain (konfigurierbar) |
$domain |
null |
mit Geltungsbereich der aktuellen (Sub)domain, aber nicht deren Subdomains (konfigurierbar) |
$secure |
true |
wenn die Seite über HTTPS läuft, sonst false (konfigurierbar) |
$httpOnly |
true |
Cookie ist für JavaScript unzugänglich |
$sameSite |
'Lax' |
Cookie muss nicht gesendet werden, wenn der Zugriff von einem anderen Ursprung erfolgt |
Sie können die Standardwerte der Parameter $path
, $domain
und $secure
in configuration ändern.
Die Zeit kann als Anzahl von Sekunden oder als String angegeben werden:
$httpResponse->setCookie('lang', 'en', '100 days');
Die Option $domain
bestimmt, welche Domänen (Ursprünge) Cookies akzeptieren können. Wird sie nicht angegeben,
wird das Cookie von derselben (Sub-)Domain akzeptiert, die es gesetzt hat, mit Ausnahme ihrer Subdomains. Wenn
$domain
angegeben ist, werden auch Subdomains einbezogen. Daher ist die Angabe von $domain
weniger
restriktiv als das Weglassen. Wenn zum Beispiel $domain = 'nette.org'
angegeben wird, ist das Cookie auch auf allen
Subdomains wie doc.nette.org
verfügbar.
Sie können die Konstanten Response::SameSiteLax
, SameSiteStrict
und SameSiteNone
für
den Wert $sameSite
verwenden.
deleteCookie (string $name, string $path=null, string $domain=null, bool $secure=null): void
Löscht ein Cookie. Die Standardwerte der Parameter sind:
$path
mit Geltungsbereich für alle Verzeichnisse ('/'
)$domain
mit Geltungsbereich der aktuellen (Sub-)Domain, aber nicht deren Subdomains$secure
wird von den Einstellungen in configuration beeinflusst
$httpResponse->deleteCookie('lang');