Nette Documentation Preview

syntax
Răspuns HTTP
************

.[perex]
Nette încapsulează răspunsul HTTP în obiecte cu o API inteligibilă.

Răspunsul HTTP este reprezentat de obiectul [api: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 |dependency-injection:passing-dependencies]. În presentere, este suficient să apelați metoda `$this->getHttpResponse()`.

→ [Instalare și cerințe |@home#Instalare]


Nette\Http\Response
===================

Obiectul, spre deosebire de [Nette\Http\Request|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) .[method]
--------------------------------------------------
Modifică [codul de stare al răspunsului |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10]. Pentru o mai bună lizibilitate a codului sursă, se recomandă utilizarea [constantelor predefinite |api:Nette\Http\IResponse] în loc de numere pentru cod.

```php
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
```


getCode(): int .[method]
------------------------
Returnează codul de stare al răspunsului.


isSent(): bool .[method]
------------------------
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) .[method]
------------------------------------------------
Trimite un antet HTTP și **suprascrie** antetul trimis anterior cu același nume.

```php
$httpResponse->setHeader('Pragma', 'no-cache');
```


addHeader(string $name, string $value) .[method]
------------------------------------------------
Trimite un antet HTTP și **nu suprascrie** antetul trimis anterior cu același nume.

```php
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
```


deleteHeader(string $name) .[method]
------------------------------------
Șterge un antet HTTP trimis anterior.


getHeader(string $header): ?string .[method]
--------------------------------------------
Returnează antetul HTTP trimis sau `null` dacă nu există. Parametrul este case-insensitive.

```php
$pragma = $httpResponse->getHeader('Pragma');
```


getHeaders(): array .[method]
-----------------------------
Returnează toate antetele HTTP trimise ca un array asociativ.

```php
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
```


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
Modifică antetul `Content-Type`.

```php
$httpResponse->setContentType('text/plain', 'UTF-8');
```


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Redirecționează către o altă adresă URL. Nu uitați să terminați scriptul după aceea.

```php
$httpResponse->redirect('http://example.com');
exit;
```


setExpiration(?string $time) .[method]
--------------------------------------
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.

```php
// cache-ul din browser va expira într-o oră
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
Răspunsul va fi descărcat folosind caseta de dialog *Salvare ca* sub numele specificat. Fișierul în sine nu este trimis.

```php
$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) .[method]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 |nette:glossary#Cookie SameSite]

Valorile implicite ale parametrilor `$path`, `$domain` și `$secure` le puteți modifica în [configurație |configuration#Cookie HTTP].

Timpul poate fi specificat ca număr de secunde sau șir:

```php
$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 .[method]
--------------------------------------------------------------------------------------------------------
Ș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 |configuration#Cookie HTTP]

```php
$httpResponse->deleteCookie('lang');
```

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');