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, который отключает кэширование.

// browser cache expires in one hour
$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');