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)
Змінює код стану відповіді. Для кращої зрозумілості вихідного коду рекомендуємо для коду використовувати замість чисел передбачені константи.
getCode(): int
Повертає код стану відповіді.
isSent(): bool
Повертає, чи вже відбулося надсилання заголовків з сервера до браузера, і отже, вже неможливо надсилати заголовки чи змінювати код стану.
setHeader(string $name, string $value)
Надсилає HTTP-заголовок і перезаписує раніше надісланий заголовок з тією ж назвою.
addHeader(string $name, string $value)
Надсилає HTTP-заголовок і не перезаписує раніше надісланий заголовок з тією ж назвою.
deleteHeader(string $name)
Видаляє раніше надісланий HTTP-заголовок.
getHeader(string $header): ?string
Повертає надісланий HTTP-заголовок або null
, якщо такий не існує.
Параметр нечутливий до регістру.
getHeaders(): array
Повертає всі надіслані HTTP-заголовки як асоціативний масив.
setContentType(string $type, ?string $charset=null)
Змінює заголовок Content-Type
.
redirect(string $url, int $code=self::S302_Found): void
Перенаправляє на інший URL. Не забудьте потім завершити скрипт.
setExpiration(?string $time)
Встановлює термін дії HTTP-документа за допомогою заголовків
Cache-Control
та Expires
. Параметром є або часовий інтервал (як
текст), або null
, що заборонить кешування.
sendAsFile(string $fileName)
Відповідь буде завантажена за допомогою діалогового вікна Зберегти як під вказаною назвою. Сам файл при цьому не надсилається.
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
за
замовчуванням можна змінити в конфігурації.
Час можна вказувати як кількість секунд або рядок:
Параметр $domain
визначає, які домени можуть приймати cookie. Якщо
він не вказаний, cookie приймає той самий (під)домен, що й встановив його,
але не його піддомени. Якщо $domain
вказаний, піддомени також
включаються. Тому вказання $domain
є менш обмежувальним, ніж його
відсутність. Наприклад, при $domain = 'nette.org'
cookies доступні також на
всіх піддоменах, таких як 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
керується налаштуваннями в конфігурації