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