Odpowiedź HTTP

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

Odpowiedź HTTP jest obiektem Nette\Http\Response, do którego możesz uzyskać dostęp, mając go przekazanego do ciebie za pomocą wtrysku zależności. W presenterech wystarczy zadzwonić na $httpResponse = $this->getHttpResponse().

Instalacja i wymagania

Odpowiedź sieci

W przeciwieństwie do Nette: HttpRequest, ten obiekt jest zmienny, więc możesz użyć seterów do zmiany stanu, tj. do wysłania nagłówków. Pamiętaj, że wszystkie setery muszą być wywołane przed wysłaniem jakichkolwiek danych wyjściowych. Metoda isSent() mówi, czy dane wyjściowe zostały wysłane. Jeśli zwraca true, to każda próba wysłania nagłówka rzuca wyjątek Nette\InvalidStateException.

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

Zmienia kod statusu 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 statusu odpowiedzi.

isSent(): bool

Zwraca, czy nagłówki zostały już wysłane z serwera do przeglądarki i dlatego nie można już wysyłać nagłówków ani zmieniać kodu statusu.

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 nie istnieje. Wielkość liter w parametrze nie ma znaczenia.

$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 na 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 po zakończeniu skryptu wyjść z niego.

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

setExpiration (?string $time)

Ustawia wygasanie dokumentu HTTP przy użyciu nagłówków Cache-Control i Expires. Parametrem jest albo przedział czasowy (jako tekst) albo null, który wyłącza buforowanie.

// cache przeglądarki wygasa za godzinę
$httpResponse->setExpiration('1 hour');

sendAsFile (string $fileName)

Odpowiedź zostanie pobrana za pomocą okna dialogowego Zapisz jako pod określoną nazwą. Nie pobiera samego pliku.

$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 '/' cookie dociera do wszystkich ścieżek w (pod)domenie (konfigurowalne)
$domain null co oznacza, że ma zasięg do bieżącej (pod)domeny, ale nie do jej poddomeny (konfigurowalne).
$secure true jeśli strona działa na HTTPS, w przeciwnym razie false (konfigurowalne)
$httpOnly true cookie jest niedostępne dla JavaScript
$sameSite 'Lax' cookie może nie być wysyłane, gdy dostęp do niego odbywa się z innej domeny

Możesz zmienić domyślne wartości $path, $domain i $secure w konfiguracji.

Czas może być określony jako liczba sekund lub ciąg znaków:

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

Parametr $domain określa, które domeny mogą akceptować pliki cookie. Jeśli nie zostanie określone, plik cookie jest akceptowany przez tę samą (pod)domenę, która go ustawiła, ale nie przez jej subdomeny. Jeśli określono $domain, uwzględniane są subdomeny. Dlatego określenie $domain jest mniej restrykcyjne niż pominięcie go. Na przykład, w przypadku $domain = 'nette.org', pliki cookie są również dostępne na wszystkich subdomenach, takich jak doc.nette.org.

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

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

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

  • $path z zasięgiem do wszystkich katalogów ('/')
  • $domain z zasięgiem do bieżącej (sub)domeny, ale nie do jej subdomen
  • $secure jest regulowany przez ustawienia w konfiguracji
$httpResponse->deleteCookie('lang');
wersja: 4.0