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');
версия: 4.0