HTTP отговор
Nette капсулира HTTP отговора в обекти с ясен API, като същевременно осигурява филтър за обработка.
Отговорът на HTTP се представя от обекта Nette\Http\Response. Ако работите с Nette, този
обект се създава автоматично от фреймуърка и може да ви бъде предаден с
помощта на инжектиране на
зависимости. В Presenters просто трябва да извикате метода
$this->getHttpResponse()
.
Нетте\Http\Response
За разлика от Nette\Http\Request, този обект е променлив, така че
можете да използвате сетъри, за да промените състоянието, т.е. да
изпратите заглавия. Не забравяйте, че всички задаващи устройства
трябва да бъдат извикани преди да бъде изпратен какъвто и да е
действителен изход. Методът isSent()
показва дали изходът е
изпратен. Ако той връща true
, всеки опит за изпращане на заглавие
хвърля изключение Nette\InvalidStateException
.
setCode(int $code, ?string $reason=null)
Променя кода на отговора на състоянието. За по-добра четливост на изходния код се препоръчва да се използват предварително дефинирани константи вместо реални числа.
getCode(): int
Връща кода на състоянието на отговора.
isSent(): bool
Връща информация дали заглавията вече са били изпратени от сървъра към браузъра, така че вече не е възможно да се изпращат заглавия или да се променя кодът на състоянието.
setHeader(string $name, string $value)
Изпраща HTTP хедър и заменя изпратения преди това хедър със същото име.
addHeader(string $name, string $value)
Изпраща HTTP заглавие и не презаписва изпратеното преди това заглавие със същото име.
deleteHeader(string $name)
Изтрива изпратен преди това HTTP хедър.
getHeader(string $header): ?string
Връща изпратения HTTP хедър или null
, ако той не съществува.
Параметърът не е чувствителен към големи и малки букви.
getHeaders(): array
Връща всички изпратени HTTP заглавия като асоциативен масив.
setContentType(string $type, ?string $charset=null)
Изпраща заглавието Content-Type
.
redirect(string $url, int $code=self::S302_Found): void
Пренасочва към друг URL адрес. Не забравяйте да излезете от скрипта след това.
setExpiration(?string $time)
Задава времето на изтичане на HTTP документ, като използва заглавията
Cache-Control
и Expires
. Параметърът е или интервал от време (като
текст), или null
, който деактивира кеширането.
sendAsFile(string $fileName)
Отговорът трябва да бъде качен с помощта на диалоговия прозорец Саѕе As с посоченото име. Самият файл не се изпраща за извеждане.
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
в конфигурацията.
Времето може да бъде зададено като брой секунди или като низ:
Параметърът $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
зависи от настройките в конфигурацията.