HTTP-відповідь

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

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

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

Nette\Http\Response

На відміну від Nette\Http\Request, цей об'єкт є змінюваним, тому ви можете використовувати сеттери для зміни стану, тобто для надсилання заголовків. Пам'ятайте, що всі сеттери повинні бути викликані до того, як буде надіслано фактичні дані. Метод 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 '/' з охопленням усіх шляхів на (під)домені (налаштовується).
$domain null з областю дії поточного (під)домену, але не його піддоменів (налаштовується).
$secure true якщо сайт працює на HTTPS, інакше false (налаштовується).
$httpOnly true cookie недоступна для JavaScript
$sameSite 'Lax' cookie не потрібно відправляти при доступі з іншого джерела

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

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

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

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

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

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

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

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