HTTP отговор

Nette капсулира HTTP отговора в обекти с разбираем API.

HTTP отговорът представлява обект Nette\Http\Response. Ако работите с Nette, този обект се създава автоматично от framework-а и можете да го получите чрез dependency injection. В презентерите е достатъчно само да извикате метода $this->getHttpResponse().

Инсталация и изисквания

Nette\Http\Response

Обектът, за разлика от Nette\Http\Request, е mutable, т.е. с помощта на сетъри можете да променяте състоянието, например да изпращате хедъри. Не забравяйте, че всички сетъри трябва да бъдат извикани преди изпращането на какъвто и да е изход. Дали вече е бил изпратен изход показва методът 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, ако такъв не съществува. Параметърът е case-insensitive.

$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('faktura.pdf');

setCookie (string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null)

Изпраща бисквитка. Стойностите по подразбиране на параметрите:

$path '/' бисквитката има обхват за всички пътища в (под)домейна (конфигурируемо)
$domain null което означава с обхват за текущия (под)домейн, но не и неговите поддомейни (конфигурируемо)
$secure true ако сайтът работи на HTTPS, иначе false (конфигурируемо)
$httpOnly true бисквитката е недостъпна за JavaScript
$sameSite 'Lax' бисквитката може да не бъде изпратена при достъп от друг домейн

Стойностите по подразбиране на параметрите $path, $domain и $secure можете да промените в конфигурацията.

Времето може да се посочва като брой секунди или низ:

$httpResponse->setCookie('lang', 'bg', '100 days');

Параметърът $domain определя кои домейни могат да приемат бисквитката. Ако не е посочен, бисквитката се приема от същия (под)домейн, който я е задал, но не и от неговите поддомейни. Ако $domain е зададен, са включени и поддомейните. Затова посочването на $domain е по-малко ограничаващо от пропускането му. Например при $domain = 'nette.org' бисквитките са достъпни и на всички поддомейни като doc.nette.org.

За стойността $sameSite можете да използвате константите Response::SameSiteLax, SameSiteStrict и SameSiteNone.

deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null)void

Изтрива бисквитка. Стойностите по подразбиране на параметрите са:

  • $path с обхват за всички директории ('/')
  • $domain с обхват за текущия (под)домейн, но не и неговите поддомейни
  • $secure се управлява според настройките в конфигурацията
$httpResponse->deleteCookie('lang');
версия: 4.0