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