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');
Version: 4.0