HTTP отговор
Nette капсулира HTTP отговора в обекти с ясен API, като същевременно осигурява филтър за обработка.
Отговорът на HTTP е обект Nette\Http\Response, който получавате, като
го предавате с помощта на инжектиране на
зависимости. В презентаторите просто извикайте
$httpResponse = $this->getHttpResponse()
.
Нетте\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
, който деактивира кеширането.
// кешът на браузъра изтича след един час
$httpResponse->setExpiration('1 hour');
sendAsFile(string $fileName)
Отговорът трябва да бъде качен с помощта на диалоговия прозорец Саѕе As с посоченото име. Самият файл не се изпраща за извеждане.
$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)
Изпраща бисквитка. Стойности на параметрите по подразбиране:
$path |
'/' |
с покритие на всички пътища в (под)домейна (може да се конфигурира). |
$domain |
null |
с покритие на текущия (под)домейн, но не и на неговите поддомейни (може да се конфигурира). |
$secure |
true |
ако сайтът работи с HTTPS, в противен случай false (може да се
конфигурира). |
$httpOnly |
true |
бисквитките не са налични за JavaScript |
$sameSite |
'Lax' |
не е необходимо да се изпраща бисквитка при достъп от друг източник |
Можете да промените стойностите по подразбиране за $path
,
$domain
и $secure
в конфигурацията.
Времето може да бъде зададено като брой секунди или като низ:
$httpResponse->setCookie('lang', 'en', '100 days');
Параметърът $domain
определя кои домейни (на произход) могат да
приемат „бисквитката“. Ако параметърът не е посочен, „бисквитката“
се приема от същия (под)домейн, който е посочен, с изключение на техните
поддомейни. Ако е посочен $domain
, поддомейните също се включват.
Така че посочването на $domain
е по-малко ограничително, отколкото
пропускането му. Например, ако $domain = 'nette.org'
, „бисквитката“ е
достъпна и на всички поддомейни като doc.nette.org
.
Константите Response::SameSiteLax
, SameSiteStrict
и SameSiteNone
могат
да се използват за стойността $sameSite
.
deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Изтрива „бисквитката“. Настройките по подразбиране имат следните стойности:
$path
с обхват върху всички директории ('/'
)$domain
с обхват в текущия (под)домейн, но не и в неговите поддомейни.$secure
зависи от настройките в конфигурацията.
$httpResponse->deleteCookie('lang');