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): static
Изменяет код состояния ответа. Для лучшей понятности исходного кода рекомендуем для кода использовать вместо чисел предопределенные константы.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Возвращает код состояния ответа.
isSent(): bool
Возвращает, были ли уже отправлены заголовки с сервера в браузер, и, следовательно, уже невозможно отправлять заголовки или изменять код состояния.
setHeader (string $name, string $value): static
Отправляет HTTP-заголовок и перезаписывает ранее отправленный заголовок с тем же именем.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value): static
Отправляет HTTP-заголовок и не перезаписывает ранее отправленный заголовок с тем же именем.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name): static
Удаляет ранее отправленный 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): static
Изменяет заголовок 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): static
Устанавливает срок действия (expiration) HTTP-документа с помощью
заголовков Cache-Control и Expires. Параметром является либо
временной интервал (как текст), либо null, что запрещает
кеширование.
// кеш в браузере истечет через час
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName): static
Ответ будет скачан с помощью диалогового окна Сохранить как под указанным именем. Сам файл при этом не отправляется.
$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)
Отправляет cookie. Значения по умолчанию параметров:
$path |
'/' |
cookie имеет область действия на все пути в (суб)домене (настраиваемый) |
$domain |
null |
что означает с областью действия на текущий (суб)домен, но не его субдомены (настраиваемый) |
$secure |
true |
если сайт работает по HTTPS, иначе false (настраиваемый) |
$httpOnly |
true |
cookie недоступен для JavaScript |
$sameSite |
'Lax' |
cookie может не отправляться при доступе с другого домена |
Значения по умолчанию параметров $path, $domain и $secure
вы можете изменить в конфигурации.
Время можно указывать как количество секунд или строку:
$httpResponse->setCookie('lang', 'cs', '100 days');
Параметр $domain определяет, какие домены могут принимать cookie.
Если он не указан, cookie принимает тот же (суб)домен, который его
установил, но не его субдомены. Если $domain указан, субдомены также
включаются. Поэтому указание $domain менее ограничивающее, чем его
отсутствие. Например, при $domain = 'nette.org' cookie доступны и на всех
субдоменах, таких как 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');