Nette Documentation Preview

syntax
Odpowiedź HTTP
**************

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

Odpowiedź HTTP reprezentuje obiekt [api: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 |dependency-injection:passing-dependencies]. W prezenterach wystarczy tylko wywołać metodę `$this->getHttpResponse()`.

→ [Instalacja i wymagania |@home#Instalacja]


Nette\Http\Response
===================

Obiekt jest w przeciwieństwie do [Nette\Http\Request|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) .[method]
--------------------------------------------------
Zmienia [kod stanu odpowiedzi |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10]. Dla lepszej czytelności kodu źródłowego zalecamy używanie [predefiniowanych stałych |api:Nette\Http\IResponse] zamiast liczb.

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


getCode(): int .[method]
------------------------
Zwraca kod stanu odpowiedzi.


isSent(): bool .[method]
------------------------
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) .[method]
------------------------------------------------
Wysyła nagłówek HTTP i **nadpisuje** wcześniej wysłany nagłówek o tej samej nazwie.

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


addHeader(string $name, string $value) .[method]
------------------------------------------------
Wysyła nagłówek HTTP i **nie nadpisuje** wcześniej wysłanego nagłówka o tej samej nazwie.

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


deleteHeader(string $name) .[method]
------------------------------------
Usuwa wcześniej wysłany nagłówek HTTP.


getHeader(string $header): ?string .[method]
--------------------------------------------
Zwraca wysłany nagłówek HTTP lub `null`, jeśli taki nie istnieje. Parametr jest niewrażliwy na wielkość liter.

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


getHeaders(): array .[method]
-----------------------------
Zwraca wszystkie wysłane nagłówki HTTP jako tablicę asocjacyjną.

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


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
Zmienia nagłówek `Content-Type`.

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


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Przekierowuje na inny adres URL. Pamiętaj, aby zakończyć skrypt po tym.

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


setExpiration(?string $time) .[method]
--------------------------------------
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.

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


sendAsFile(string $fileName) .[method]
--------------------------------------
Odpowiedź zostanie pobrana za pomocą okna dialogowego *Zapisz jako* pod podaną nazwą. Sam plik nie jest wysyłany.

```php
$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) .[method]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 |nette:glossary#SameSite cookie]

Domyślne wartości parametrów `$path`, `$domain` i `$secure` możesz zmienić w [konfiguracji |configuration#Ciasteczka HTTP].

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

```php
$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 .[method]
--------------------------------------------------------------------------------------------------------
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 |configuration#Ciasteczka HTTP]

```php
$httpResponse->deleteCookie('lang');
```

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