Nette Documentation Preview

syntax
HTTP-відповідь
**************

.[perex]
Nette інкапсулює HTTP-відповідь в об'єкти зі зрозумілим API.

HTTP-відповідь представляє об'єкт [api:Nette\Http\Response]. Якщо ви працюєте з Nette, цей об'єкт автоматично створюється фреймворком, і ви можете отримати його за допомогою [впровадження залежностей |dependency-injection:passing-dependencies]. У презентерах достатньо лише викликати метод `$this->getHttpResponse()`.

→ [Встановлення та вимоги |@home#Встановлення]


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

Об'єкт, на відміну від [Nette\Http\Request|request], є mutable (змінним), тобто за допомогою сеттерів ви можете змінювати стан, наприклад, надсилати заголовки. Не забувайте, що всі сеттери повинні бути викликані **перед надсиланням будь-якого виводу.** Чи був вже надісланий вивід, покаже метод `isSent()`. Якщо він повертає `true`, кожна спроба надіслати заголовок викличе виняток `Nette\InvalidStateException`.


setCode(int $code, ?string $reason=null) .[method]
--------------------------------------------------
Змінює [код стану відповіді |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10]. Для кращої зрозумілості вихідного коду рекомендуємо для коду використовувати замість чисел [передбачені константи |api:Nette\Http\IResponse].

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


getCode(): int .[method]
------------------------
Повертає код стану відповіді.


isSent(): bool .[method]
------------------------
Повертає, чи вже відбулося надсилання заголовків з сервера до браузера, і отже, вже неможливо надсилати заголовки чи змінювати код стану.


setHeader(string $name, string $value) .[method]
------------------------------------------------
Надсилає HTTP-заголовок і **перезаписує** раніше надісланий заголовок з тією ж назвою.

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


addHeader(string $name, string $value) .[method]
------------------------------------------------
Надсилає HTTP-заголовок і **не перезаписує** раніше надісланий заголовок з тією ж назвою.

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


deleteHeader(string $name) .[method]
------------------------------------
Видаляє раніше надісланий HTTP-заголовок.


getHeader(string $header): ?string .[method]
--------------------------------------------
Повертає надісланий HTTP-заголовок або `null`, якщо такий не існує. Параметр нечутливий до регістру.

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


getHeaders(): array .[method]
-----------------------------
Повертає всі надіслані HTTP-заголовки як асоціативний масив.

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


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
Змінює заголовок `Content-Type`.

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


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Перенаправляє на інший URL. Не забудьте потім завершити скрипт.

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


setExpiration(?string $time) .[method]
--------------------------------------
Встановлює термін дії HTTP-документа за допомогою заголовків `Cache-Control` та `Expires`. Параметром є або часовий інтервал (як текст), або `null`, що заборонить кешування.

```php
// кеш у браузері закінчиться через годину
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
Відповідь буде завантажена за допомогою діалогового вікна *Зберегти як* під вказаною назвою. Сам файл при цьому не надсилається.

```php
$httpResponse->sendAsFile('invoice.pdf'); // Змінено назву файлу на англійську для прикладу
```


setCookie(string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null) .[method]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Надсилає cookie. Значення параметрів за замовчуванням:

| `$path`     | `'/'`   | cookie має область дії на всі шляхи в (під)домені *(конфігурується)*
| `$domain`   | `null`  | що означає з областю дії на поточний (під)домен, але не на його піддомени *(конфігурується)*
| `$secure`   | `true`  | якщо сайт працює на HTTPS, інакше `false` *(конфігурується)*
| `$httpOnly` | `true`  | cookie недоступна для JavaScript
| `$sameSite` | `'Lax'` | cookie може не надсилатися при [доступі з іншого домену |nette:glossary#SameSite cookie]

Значення параметрів `$path`, `$domain` та `$secure` за замовчуванням можна змінити в [конфігурації |configuration#HTTP cookie].

Час можна вказувати як кількість секунд або рядок:

```php
$httpResponse->setCookie('lang', 'uk', '100 days'); // Змінено мову на 'uk'
```

Параметр `$domain` визначає, які домени можуть приймати cookie. Якщо він не вказаний, cookie приймає той самий (під)домен, що й встановив його, але не його піддомени. Якщо `$domain` вказаний, піддомени також включаються. Тому вказання `$domain` є менш обмежувальним, ніж його відсутність. Наприклад, при `$domain = 'nette.org'` cookies доступні також на всіх піддоменах, таких як `doc.nette.org`.

Для значення `$sameSite` ви можете використовувати константи `Response::SameSiteLax`, `Response::SameSiteStrict` та `Response::SameSiteNone`.


deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void .[method]
--------------------------------------------------------------------------------------------------------
Видаляє cookie. Значення параметрів за замовчуванням:
- `$path` з областю дії на всі каталоги (`'/'`)
- `$domain` з областю дії на поточний (під)домен, але не на його піддомени
- `$secure` керується налаштуваннями в [конфігурації |configuration#HTTP cookie]

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

HTTP-відповідь

Nette інкапсулює HTTP-відповідь в об'єкти зі зрозумілим API.

HTTP-відповідь представляє об'єкт Nette\Http\Response. Якщо ви працюєте з Nette, цей об'єкт автоматично створюється фреймворком, і ви можете отримати його за допомогою впровадження залежностей. У презентерах достатньо лише викликати метод $this->getHttpResponse().

Встановлення та вимоги

Nette\Http\Response

Об'єкт, на відміну від Nette\Http\Request, є mutable (змінним), тобто за допомогою сеттерів ви можете змінювати стан, наприклад, надсилати заголовки. Не забувайте, що всі сеттери повинні бути викликані перед надсиланням будь-якого виводу. Чи був вже надісланий вивід, покаже метод isSent(). Якщо він повертає true, кожна спроба надіслати заголовок викличе виняток Nette\InvalidStateException.

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

Змінює код стану відповіді. Для кращої зрозумілості вихідного коду рекомендуємо для коду використовувати замість чисел передбачені константи.

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

getCode(): int

Повертає код стану відповіді.

isSent(): bool

Повертає, чи вже відбулося надсилання заголовків з сервера до браузера, і отже, вже неможливо надсилати заголовки чи змінювати код стану.

setHeader(string $name, string $value)

Надсилає HTTP-заголовок і перезаписує раніше надісланий заголовок з тією ж назвою.

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

addHeader(string $name, string $value)

Надсилає HTTP-заголовок і не перезаписує раніше надісланий заголовок з тією ж назвою.

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

deleteHeader(string $name)

Видаляє раніше надісланий HTTP-заголовок.

getHeader(string $header): ?string

Повертає надісланий HTTP-заголовок або null, якщо такий не існує. Параметр нечутливий до регістру.

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

getHeaders(): array

Повертає всі надіслані HTTP-заголовки як асоціативний масив.

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

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

Змінює заголовок Content-Type.

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

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

Перенаправляє на інший URL. Не забудьте потім завершити скрипт.

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

setExpiration(?string $time)

Встановлює термін дії HTTP-документа за допомогою заголовків Cache-Control та Expires. Параметром є або часовий інтервал (як текст), або null, що заборонить кешування.

// кеш у браузері закінчиться через годину
$httpResponse->setExpiration('1 hour');

sendAsFile(string $fileName)

Відповідь буде завантажена за допомогою діалогового вікна Зберегти як під вказаною назвою. Сам файл при цьому не надсилається.

$httpResponse->sendAsFile('invoice.pdf'); // Змінено назву файлу на англійську для прикладу

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

Надсилає cookie. Значення параметрів за замовчуванням:

$path '/' cookie має область дії на всі шляхи в (під)домені (конфігурується)
$domain null що означає з областю дії на поточний (під)домен, але не на його піддомени (конфігурується)
$secure true якщо сайт працює на HTTPS, інакше false (конфігурується)
$httpOnly true cookie недоступна для JavaScript
$sameSite 'Lax' cookie може не надсилатися при доступі з іншого домену

Значення параметрів $path, $domain та $secure за замовчуванням можна змінити в конфігурації.

Час можна вказувати як кількість секунд або рядок:

$httpResponse->setCookie('lang', 'uk', '100 days'); // Змінено мову на 'uk'

Параметр $domain визначає, які домени можуть приймати cookie. Якщо він не вказаний, cookie приймає той самий (під)домен, що й встановив його, але не його піддомени. Якщо $domain вказаний, піддомени також включаються. Тому вказання $domain є менш обмежувальним, ніж його відсутність. Наприклад, при $domain = 'nette.org' cookies доступні також на всіх піддоменах, таких як doc.nette.org.

Для значення $sameSite ви можете використовувати константи Response::SameSiteLax, Response::SameSiteStrict та Response::SameSiteNone.

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

Видаляє cookie. Значення параметрів за замовчуванням:

  • $path з областю дії на всі каталоги ('/')
  • $domain з областю дії на поточний (під)домен, але не на його піддомени
  • $secure керується налаштуваннями в конфігурації
$httpResponse->deleteCookie('lang');