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');