Nette Documentation Preview

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

.[perex]
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 [api:Nette\Http\Response], pe care îl obțineți trecându-l cu ajutorul [injecției de dependență |dependency-injection:passing-dependencies]. În prezentatori, pur și simplu apelați `$httpResponse = $this->getHttpResponse()`.

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


Nette\Http\Răspuns .[#toc-nette-http-response]
==============================================

Spre deosebire de [Nette\Http\Request |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) .[method]
-------------------------------------------------
Modifică un [cod de răspuns de |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10] stare. Pentru o mai bună lizibilitate a codului sursă, se recomandă utilizarea unor [constante predefinite |api:Nette\Http\IResponse] în locul numerelor reale.

```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 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) .[method]
------------------------------------------------
Trimite un antet HTTP și **subscrie** antetul cu același nume trimis anterior.

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


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

```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 nu ține cont de majuscule și minuscule.

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


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

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


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

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


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Redirecționează către un alt URL. Nu uitați să ieșiți apoi din script.

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


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

```php
// cache-ul browserului expiră într-o oră
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
Răspunsul trebuie descărcat cu dialogul *Save as* cu numele specificat. Nu trimite niciun fișier propriu-zis la ieșire.

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

Puteți modifica valorile implicite ale parametrilor `$path`, `$domain` și `$secure` în [configuration |configuration#HTTP cookie].

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

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

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

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

Instalare și cerințe

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