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()
.
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');