Răspuns HTTP
Nette încapsulează răspunsul HTTP în obiecte cu un API ușor de înțeles, oferind în același timp un filtru de curățare.
Un răspuns HTTP este un obiect Nette\Http\Response, pe
care îl obțineți trecându-l cu ajutorul injecției de
dependență. În prezentatori, pur și simplu apelați $httpResponse = $this->getHttpResponse()
.
Nette\Http\Răspuns
Spre deosebire de Nette\Http\Request, acest obiect este mutabil, astfel încât puteți utiliza
setori pentru a schimba starea, adică pentru a trimite antetele. Nu uitați că toți cei care setează trebuie să fie
apelați înainte de a trimite orice ieșire efectivă. Metoda isSent()
indică dacă au fost trimise ieșirile.
Dacă returnează true
, fiecare încercare de a trimite un antet aruncă o excepție
Nette\InvalidStateException
.
setCode(int $code, ?string $reason=null)
Modifică un cod de răspuns de stare. Pentru o mai bună lizibilitate a codului sursă, se recomandă utilizarea unor constante predefinite în locul numerelor reale.
$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 către browser, astfel încât nu mai este posibil să se trimită antetele sau să se modifice codul de stare.
setHeader(string $name, string $value)
Trimite un antet HTTP și subscrie antetul cu același nume trimis anterior.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader(string $name, string $value)
Trimite un antet HTTP și nu suprascrie antetul cu același nume trimis anterior.
$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 nu ține cont de majuscule și
minuscule.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Returnează toate antetele HTTP trimise ca matrice asociativă.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType(string $type, ?string $charset=null)
Trimite antetul Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect(string $url, int $code=self::S302_Found): void
Redirecționează către un alt URL. Nu uitați să ieșiți apoi din script.
$httpResponse->redirect('http://example.com');
exit;
setExpiration(?string $time)
Stabilește data de expirare a documentului HTTP folosind anteturile Cache-Control
și Expires
.
Parametrul este fie un interval de timp (ca text), fie null
, care dezactivează memoria cache.
// cache-ul browserului expiră într-o oră
$httpResponse->setExpiration('1 hour');
sendAsFile(string $fileName)
Răspunsul trebuie descărcat cu dialogul Save as cu numele specificat. Nu trimite niciun fișier propriu-zis la ieșire.
$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)
Trimite un cookie. Valori implicite ale parametrilor:
$path |
'/' |
cu domeniul de aplicare pentru toate căile de acces pe (sub)domeniu (configurabil). |
$domain |
null |
cu domeniul de aplicare al (sub)domeniului curent, dar nu și al subdomeniilor acestuia (configurabil) |
$secure |
true |
dacă site-ul funcționează pe HTTPS, în caz contrar false (configurabil) |
$httpOnly |
true |
cookie-ul este inaccesibil pentru JavaScript |
$sameSite |
'Lax' |
cookie-ul nu trebuie să fie trimis atunci când este accesat de la o altă origine |
Puteți modifica valorile implicite ale parametrilor $path
, $domain
și $secure
în configuration.
Timpul poate fi specificat ca număr de secunde sau ca un șir de caractere:
$httpResponse->setCookie('lang', 'en', '100 days');
Opțiunea $domain
determină domeniile (originile) care pot accepta cookie-uri. Dacă nu este specificată,
cookie-ul este acceptat de același (sub)domeniu ca și cel stabilit de acesta, cu excepția subdomeniilor acestora. Dacă este
specificată $domain
, atunci sunt incluse și subdomeniile. Prin urmare, specificarea $domain
este mai
puțin restrictivă decât omiterea. De exemplu, dacă $domain = 'nette.org'
, cookie-ul este, de asemenea, acceptat
pe toate subdomeniile ca doc.nette.org
.
Puteți utiliza constantele Response::SameSiteLax
, SameSiteStrict
și SameSiteNone
pentru valoarea $sameSite
.
deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Șterge un modul cookie. Valorile implicite ale parametrilor sunt:
$path
cu domeniul de aplicare la toate directoarele ('/'
)$domain
cu domeniul de aplicare al (sub)domeniului curent, dar nu și al subdomeniilor sale$secure
este afectat de setările din configurația#HTTP cookie
$httpResponse->deleteCookie('lang');