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().

Instalare și cerințe

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');
versiune: 4.0