Odziv HTTP
Nette zapakira odziv HTTP v predmete z razumljivim API-jem, hkrati pa zagotavlja filter za čiščenje.
Odziv HTTP je objekt Nette\Http\Response, ki ga dobite
tako, da ga posredujete z uporabo vbrizgavanja odvisnosti.
V predstavitvah preprosto pokličite $httpResponse = $this->getHttpResponse()
.
Nette\Http\Response
Za razliko od Nette\Http\Request je ta objekt spremenljiv, zato lahko za spremembo stanja, tj. za
pošiljanje glave, uporabite nastavitve. Ne pozabite, da je treba vse nastavljalnike poklicati, preden se pošlje dejanski
izhod. Metoda isSent()
pove, ali je bil izhod poslan. Če vrne true
, vsak poskus pošiljanja glave
vrže izjemo Nette\InvalidStateException
.
setCode(int $code, ?string $reason=null)
Spremeni odzivno kodo stanja. Za boljšo berljivost izvorne kode je priporočljivo uporabljati vnaprej določene konstante namesto dejanskih številk.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Vrne kodo stanja odgovora.
isSent(): bool
Vrne, ali so bile glave že poslane iz strežnika v brskalnik, zato ni več mogoče pošiljati glav ali spreminjati kode stanja.
setHeader(string $name, string $value)
Pošlje glavo HTTP in prepiše prej poslano glavo z istim imenom.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader(string $name, string $value)
Pošlje glavo HTTP in ne prepiše prej poslane glave z istim imenom.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader(string $name)
Izbriše predhodno poslano glavo HTTP.
getHeader(string $header): ?string
Vrne poslano glavo HTTP ali null
, če ne obstaja. Pri parametru se ne razlikujejo velike in male črke.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Vrne vse poslane glave HTTP kot asociativno polje.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType(string $type, ?string $charset=null)
Pošlje glavo Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect(string $url, int $code=self::S302_Found): void
preusmeri na drug naslov URL. Nato ne pozabite zaključiti skripte.
$httpResponse->redirect('http://example.com');
exit;
setExpiration(?string $time)
Določi potek veljavnosti dokumenta HTTP z uporabo glave Cache-Control
in Expires
. Parameter je
bodisi časovni interval (kot besedilo) bodisi null
, ki onemogoči predpomnjenje.
// predpomnilnik brskalnika poteče čez eno uro
$httpResponse->setExpiration('1 hour');
sendAsFile(string $fileName)
Odgovor je treba prenesti s pogovornim oknom Shrani kot z določenim imenom. Sam ne pošilja nobene datoteke v izhod.
$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)
Pošlje piškotek. Privzete vrednosti parametrov:
$path |
'/' |
s področjem uporabe za vse poti v (pod)domeni (nastavljivo) |
$domain |
null |
s področjem uporabe trenutne (pod)domene, vendar ne njenih poddomen (nastavljivo) |
$secure |
true |
če spletno mesto deluje v HTTPS, sicer false (nastavljivo) |
$httpOnly |
true |
piškotek ni dostopen za JavaScript |
$sameSite |
'Lax' |
piškotka ni treba poslati, če do njega dostopate iz drugega izvora |
Privzete vrednosti parametrov $path
, $domain
in $secure
lahko spremenite v konfiguraciji.
Čas lahko določite kot število sekund ali niz:
$httpResponse->setCookie('lang', 'en', '100 days');
Možnost $domain
določa, katere domene (izvori) lahko sprejmejo piškotke. Če ni določena, piškotek sprejme
ista (pod)domena, kot je določena z njo, razen njihovih poddomen. Če je določena možnost $domain
, so vključene
tudi poddomene. Zato je navedba $domain
manj omejujoča kot opustitev. Če je na primer
$domain = 'nette.org'
, je piškotek na voljo tudi na vseh poddomenah, kot je doc.nette.org
.
Za vrednost $sameSite
lahko uporabite konstante Response::SameSiteLax
, SameSiteStrict
in
SameSiteNone
.
deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Izbriše piškotek. Privzete vrednosti parametrov so:
$path
s področjem uporabe za vse imenike ('/'
)$domain
s področjem uporabe trenutne (pod)domene, vendar ne njenih poddomen- Na
$secure
vplivajo nastavitve v konfiguraciji#HTTP piškotek
$httpResponse->deleteCookie('lang');