Odgovor HTTP
Nette inkapsulira HTTP odgovor v objekte z razumljivim API-jem.
HTTP odgovor predstavlja objekt Nette\Http\Response.
Če delate z Nette, ta objekt samodejno ustvari ogrodje in si ga lahko pustite predati s pomočjo dependency injection. V presenterjih je dovolj le
poklicati metodo $this->getHttpResponse()
.
Nette\Http\Response
Objekt je za razliko od Nette\Http\Request spremenljiv (mutable), torej
s pomočjo nastavitvenih metod lahko spreminjate stanje, torej npr. pošiljate glave. Ne pozabite, da morajo biti vse
nastavitvene metode poklicane pred pošiljanjem kakršnega koli izpisa. Ali je bil izpis že poslan, pove metoda
isSent()
. Če vrača true
, vsak poskus pošiljanja glave sproži izjemo
Nette\InvalidStateException
.
setCode (int $code, ?string $reason=null)
Spremeni statusno kodo odgovora. Zaradi boljše razumljivosti izvorne kode priporočamo, da za kodo namesto številk uporabljate preddefinirane konstante.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Vrača statusno kodo odgovora.
isSent(): bool
Vrača, ali so bile glave že poslane s strežnika v brskalnik, in torej ni več mogoče pošiljati glav ali spreminjati statusne kode.
setHeader (string $name, string $value)
Pošlje HTTP glavo in prepiše prej poslano glavo istega imena.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Pošlje HTTP glavo in ne prepiše prej poslane glave istega imena.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Izbriše prej poslano HTTP glavo.
getHeader (string $header): ?string
Vrača poslano HTTP glavo ali null
, če takšna ne obstaja. Parameter je neobčutljiv na velikost črk.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Vrača vse poslane HTTP glave kot asociativno polje.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Spremeni glavo Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Preusmeri na drug URL. Ne pozabite nato končati skripta.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Nastavi potek HTTP dokumenta s pomočjo glav Cache-Control
in Expires
. Parameter je bodisi časovni
interval (kot besedilo) ali null
, kar onemogoči predpomnjenje.
// predpomnilnik v brskalniku poteče čez eno uro
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
Odgovor bo prenesen s pomočjo pogovornega okna Shrani kot pod navedenim imenom. Same datoteke pri tem ne pošilja.
$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)
Pošlje piškotek. Privzete vrednosti parametrov:
$path |
'/' |
piškotek ima doseg na vse poti v (pod)domeni (nastavljivo) |
$domain |
null |
kar pomeni z dosegom na trenutno (pod)domeno, vendar ne njenih poddomen (nastavljivo) |
$secure |
true |
če spletno mesto teče na HTTPS, sicer false (nastavljivo) |
$httpOnly |
true |
piškotek je za JavaScript nedostopen |
$sameSite |
'Lax' |
piškotek ni nujno poslan pri dostopu iz druge domene |
Privzete vrednosti parametrov $path
, $domain
in $secure
lahko spremenite v konfiguraciji.
Čas lahko navajate kot število sekund ali niz:
$httpResponse->setCookie('lang', 'cs', '100 days');
Parameter $domain
določa, katere domene lahko sprejemajo piškotek. Če ni naveden, piškotek sprejema ista
(pod)domena, kot ga je nastavila, vendar ne njenih poddomen. Če je $domain
določen, so vključene tudi poddomene.
Zato je navedba $domain
manj omejujoča kot izpustitev. Na primer, pri $domain = 'nette.org'
so
piškotki dostopni tudi na vseh poddomenah kot 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
z dosegom na vse imenike ('/'
)$domain
z dosegom na trenutno (pod)domeno, vendar ne njenih poddomen$secure
se ravna po nastavitvah v konfiguraciji
$httpResponse->deleteCookie('lang');