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