Odpowiedź HTTP

Nette enkapsuluje odpowiedź HTTP w obiekty z zrozumiałym API.

Odpowiedź HTTP reprezentuje obiekt Nette\Http\Response. Jeśli pracujesz z Nette, ten obiekt jest automatycznie tworzony przez framework i możesz go otrzymać za pomocą wstrzykiwania zależności. W prezenterach wystarczy tylko wywołać metodę $this->getHttpResponse().

Instalacja i wymagania

Nette\Http\Response

Obiekt jest w przeciwieństwie do Nette\Http\Request mutable, czyli za pomocą setterów możesz zmieniać stan, czyli np. wysyłać nagłówki. Pamiętaj, że wszystkie settery muszą być wywołane przed wysłaniem jakiegokolwiek wyjścia. Czy wyjście zostało już wysłane, powie metoda isSent(). Jeśli zwraca true, każda próba wysłania nagłówka wywoła wyjątek Nette\InvalidStateException.

setCode (int $code, ?string $reason=null)

Zmienia kod stanu odpowiedzi. Dla lepszej czytelności kodu źródłowego zalecamy używanie predefiniowanych stałych zamiast liczb.

$httpResponse->setCode(Nette\Http\Response::S404_NotFound);

getCode(): int

Zwraca kod stanu odpowiedzi.

isSent(): bool

Zwraca informację, czy nagłówki zostały już wysłane z serwera do przeglądarki, a zatem nie jest już możliwe wysyłanie nagłówków ani zmiana kodu stanu.

setHeader (string $name, string $value)

Wysyła nagłówek HTTP i nadpisuje wcześniej wysłany nagłówek o tej samej nazwie.

$httpResponse->setHeader('Pragma', 'no-cache');

addHeader (string $name, string $value)

Wysyła nagłówek HTTP i nie nadpisuje wcześniej wysłanego nagłówka o tej samej nazwie.

$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');

deleteHeader (string $name)

Usuwa wcześniej wysłany nagłówek HTTP.

getHeader (string $header): ?string

Zwraca wysłany nagłówek HTTP lub null, jeśli taki nie istnieje. Parametr jest niewrażliwy na wielkość liter.

$pragma = $httpResponse->getHeader('Pragma');

getHeaders(): array

Zwraca wszystkie wysłane nagłówki HTTP jako tablicę asocjacyjną.

$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];

setContentType (string $type, ?string $charset=null)

Zmienia nagłówek Content-Type.

$httpResponse->setContentType('text/plain', 'UTF-8');

redirect (string $url, int $code=self::S302_Found)void

Przekierowuje na inny adres URL. Pamiętaj, aby zakończyć skrypt po tym.

$httpResponse->redirect('http://example.com');
exit;

setExpiration (?string $time)

Ustawia wygaśnięcie dokumentu HTTP za pomocą nagłówków Cache-Control i Expires. Parametrem jest interwał czasowy (jako tekst) lub null, co wyłącza buforowanie.

// cache w przeglądarce wygaśnie za godzinę
$httpResponse->setExpiration('1 hour');

sendAsFile (string $fileName)

Odpowiedź zostanie pobrana za pomocą okna dialogowego Zapisz jako pod podaną nazwą. Sam plik nie jest wysyłany.

$httpResponse->sendAsFile('faktura.pdf');

setCookie (string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null)

Wysyła ciasteczko. Domyślne wartości parametrów:

$path '/' ciasteczko ma zasięg na wszystkie ścieżki w (sub)domenie (konfigurowalne)
$domain null co oznacza zasięg na bieżącą (sub)domenę, ale nie jej subdomeny (konfigurowalne)
$secure true jeśli strona działa na HTTPS, w przeciwnym razie false (konfigurowalne)
$httpOnly true ciasteczko jest niedostępne dla JavaScript
$sameSite 'Lax' ciasteczko może nie być wysyłane podczas dostępu z innej domeny

Domyślne wartości parametrów $path, $domain i $secure możesz zmienić w konfiguracji.

Czas można podawać jako liczbę sekund lub ciąg znaków:

$httpResponse->setCookie('lang', 'pl', '100 days');

Parametr $domain określa, które domeny mogą akceptować ciasteczka. Jeśli nie jest podany, ciasteczko akceptuje ta sama (sub)domena, która je ustawiła, ale nie jej subdomeny. Jeśli $domain jest podany, uwzględniane są również subdomeny. Dlatego podanie $domain jest mniej ograniczające niż jego pominięcie. Na przykład przy $domain = 'nette.org' ciasteczka są dostępne również na wszystkich subdomenach, takich jak doc.nette.org.

Dla wartości $sameSite możesz użyć stałych Response::SameSiteLax, SameSiteStrict i SameSiteNone.

deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null)void

Usuwa ciasteczko. Domyślne wartości parametrów to:

  • $path z zasięgiem na wszystkie katalogi ('/')
  • $domain z zasięgiem na bieżącą (sub)domenę, ale nie jej subdomeny
  • $secure jest zgodny z ustawieniami w konfiguracji
$httpResponse->deleteCookie('lang');
wersja: 4.0