Răspuns HTTP
Nette încapsulează răspunsul HTTP în obiecte cu o API inteligibilă.
Răspunsul HTTP este reprezentat de obiectul Nette\Http\Response. Dacă lucrați cu Nette, acest obiect
este creat automat de framework și îl puteți primi prin injecție de dependențe. În presentere, este
suficient să apelați metoda $this->getHttpResponse()
.
Nette\Http\Response
Obiectul, spre deosebire de Nette\Http\Request, este mutabil, adică
puteți modifica starea folosind setteri, de exemplu, trimițând antete. Nu uitați că toți setterii trebuie apelați
înainte de a trimite orice ieșire. Dacă ieșirea a fost deja trimisă, indică metoda isSent()
. Dacă
returnează true
, orice încercare de a trimite un antet va arunca o excepție
Nette\InvalidStateException
.
setCode (int $code, ?string $reason=null)
Modifică codul de stare al răspunsului. Pentru o mai bună lizibilitate a codului sursă, se recomandă utilizarea constantelor predefinite în loc de numere pentru cod.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Returnează codul de stare al răspunsului.
isSent(): bool
Returnează dacă antetele au fost deja trimise de la server la browser și, prin urmare, nu mai este posibil să se trimită antete sau să se modifice codul de stare.
setHeader (string $name, string $value)
Trimite un antet HTTP și suprascrie antetul trimis anterior cu același nume.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Trimite un antet HTTP și nu suprascrie antetul trimis anterior cu același nume.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Șterge un antet HTTP trimis anterior.
getHeader (string $header): ?string
Returnează antetul HTTP trimis sau null
dacă nu există. Parametrul este case-insensitive.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Returnează toate antetele HTTP trimise ca un array asociativ.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Modifică antetul Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Redirecționează către o altă adresă URL. Nu uitați să terminați scriptul după aceea.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Setează expirarea documentului HTTP folosind antetele Cache-Control
și Expires
. Parametrul este fie
un interval de timp (ca text), fie null
, ceea ce dezactivează stocarea în cache.
// cache-ul din browser va expira într-o oră
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
Răspunsul va fi descărcat folosind caseta de dialog Salvare ca sub numele specificat. Fișierul în sine nu este trimis.
$httpResponse->sendAsFile('factura.pdf');
setCookie (string $name, string $value, $time, ?string $path=null, ?string $domain=null, ?bool $secure=null, ?bool $httpOnly=null, ?string $sameSite=null)
Trimite un cookie. Valorile implicite ale parametrilor:
$path |
'/' |
cookie-ul are acoperire pentru toate căile din (sub)domeniu (configurabil) |
$domain |
null |
ceea ce înseamnă cu acoperire pentru (sub)domeniul curent, dar nu și subdomeniile sale (configurabil) |
$secure |
true |
dacă site-ul rulează pe HTTPS, altfel false (configurabil) |
$httpOnly |
true |
cookie-ul este inaccesibil pentru JavaScript |
$sameSite |
'Lax' |
cookie-ul poate să nu fie trimis la accesul de pe alt domeniu |
Valorile implicite ale parametrilor $path
, $domain
și $secure
le puteți modifica în
configurație.
Timpul poate fi specificat ca număr de secunde sau șir:
$httpResponse->setCookie('lang', 'ro', '100 days');
Parametrul $domain
specifică ce domenii pot accepta cookie-uri. Dacă nu este specificat, cookie-ul este acceptat
de același (sub)domeniu care l-a setat, dar nu și de subdomeniile sale. Dacă $domain
este specificat, sunt incluse
și subdomeniile. Prin urmare, specificarea $domain
este mai puțin restrictivă decât omiterea sa. De exemplu, cu
$domain = 'nette.org'
, cookie-urile sunt disponibile și pe toate subdomeniile precum doc.nette.org
.
Pentru valoarea $sameSite
puteți utiliza constantele Response::SameSiteLax
,
SameSiteStrict
și SameSiteNone
.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Șterge un cookie. Valorile implicite ale parametrilor sunt:
$path
cu acoperire pentru toate directoarele ('/'
)$domain
cu acoperire pentru (sub)domeniul curent, dar nu și subdomeniile sale$secure
se ghidează după setările din configurație
$httpResponse->deleteCookie('lang');