Nette Documentation Preview

syntax
Odziv HTTP
**********

.[perex]
Nette zapakira odziv HTTP v predmete z razumljivim API-jem, hkrati pa zagotavlja filter za čiščenje.

Odziv HTTP je objekt [api:Nette\Http\Response], ki ga dobite tako, da ga posredujete z uporabo [vbrizgavanja odvisnosti |dependency-injection:passing-dependencies]. V predstavitvah preprosto pokličite `$httpResponse = $this->getHttpResponse()`.

→ [Namestitev in zahteve |@home#Installation]


Nette\Http\Response .[#toc-nette-http-response]
===============================================

Za razliko od [Nette\Http\Request |request] je ta objekt spremenljiv, zato lahko za spremembo stanja, tj. za pošiljanje glave, uporabite nastavitve. Ne pozabite, da je treba vse nastavljalnike **poklicati, preden se pošlje dejanski izhod.** Metoda `isSent()` pove, ali je bil izhod poslan. Če vrne `true`, vsak poskus pošiljanja glave vrže izjemo `Nette\InvalidStateException`.


setCode(int $code, ?string $reason=null) .[method]
--------------------------------------------------
Spremeni [odzivno kodo |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10] stanja. Za boljšo berljivost izvorne kode je priporočljivo uporabljati [vnaprej določene konstante |api:Nette\Http\IResponse] namesto dejanskih številk.

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


getCode(): int .[method]
------------------------
Vrne kodo stanja odgovora.


isSent(): bool .[method]
------------------------
Vrne, ali so bile glave že poslane iz strežnika v brskalnik, zato ni več mogoče pošiljati glav ali spreminjati kode stanja.


setHeader(string $name, string $value) .[method]
------------------------------------------------
Pošlje glavo HTTP in **prepiše** prej poslano glavo z istim imenom.

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


addHeader(string $name, string $value) .[method]
------------------------------------------------
Pošlje glavo HTTP in **ne prepiše** prej poslane glave z istim imenom.

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


deleteHeader(string $name) .[method]
------------------------------------
Izbriše predhodno poslano glavo HTTP.


getHeader(string $header): ?string .[method]
--------------------------------------------
Vrne poslano glavo HTTP ali `null`, če ne obstaja. Pri parametru se ne razlikujejo velike in male črke.

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


getHeaders(): array .[method]
-----------------------------
Vrne vse poslane glave HTTP kot asociativno polje.

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


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
Pošlje glavo `Content-Type`.

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


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
preusmeri na drug naslov URL. Nato ne pozabite zaključiti skripte.

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


setExpiration(?string $time) .[method]
--------------------------------------
Določi potek veljavnosti dokumenta HTTP z uporabo glave `Cache-Control` in `Expires`. Parameter je bodisi časovni interval (kot besedilo) bodisi `null`, ki onemogoči predpomnjenje.

```php
// predpomnilnik brskalnika poteče čez eno uro
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
Odgovor je treba prenesti s pogovornim oknom *Shrani kot* z določenim imenom. Sam ne pošilja nobene datoteke v izhod.

```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]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Pošlje piškotek. Privzete vrednosti parametrov:

| `$path` | `'/'` | s področjem uporabe za vse poti v (pod)domeni *(nastavljivo)*
| `$domain` | `null` | s področjem uporabe trenutne (pod)domene, vendar ne njenih poddomen *(nastavljivo)*
| `$secure` | `true` | če spletno mesto deluje v HTTPS, sicer `false` *(nastavljivo)*
| `$httpOnly` | `true` | piškotek ni dostopen za JavaScript
| `$sameSite` | `'Lax'` | piškotka ni treba poslati, če do njega [dostopate iz drugega izvora |nette:glossary#SameSite cookie]

Privzete vrednosti parametrov `$path`, `$domain` in `$secure` lahko spremenite v [konfiguraciji |configuration#HTTP cookie].

Čas lahko določite kot število sekund ali niz:

```php
$httpResponse->setCookie('lang', 'en', '100 days');
```

Možnost `$domain` določa, katere domene (izvori) lahko sprejmejo piškotke. Če ni določena, piškotek sprejme ista (pod)domena, kot je določena z njo, razen njihovih poddomen. Če je določena možnost `$domain`, so vključene tudi poddomene. Zato je navedba `$domain` manj omejujoča kot opustitev. Če je na primer `$domain = 'nette.org'`, je piškotek na voljo tudi na vseh poddomenah, kot je `doc.nette.org`.

Za vrednost `$sameSite` lahko uporabite konstante `Response::SameSiteLax`, `SameSiteStrict` in `SameSiteNone`.


deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void .[method]
--------------------------------------------------------------------------------------------------------
Izbriše piškotek. Privzete vrednosti parametrov so:
- `$path` s področjem uporabe za vse imenike (`'/'`)
- `$domain` s področjem uporabe trenutne (pod)domene, vendar ne njenih poddomen
- Na `$secure` vplivajo nastavitve v [konfiguraciji#HTTP piškotek |configuration#HTTP cookie]

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

Odziv HTTP

Nette zapakira odziv HTTP v predmete z razumljivim API-jem, hkrati pa zagotavlja filter za čiščenje.

Odziv HTTP je objekt Nette\Http\Response, ki ga dobite tako, da ga posredujete z uporabo vbrizgavanja odvisnosti. V predstavitvah preprosto pokličite $httpResponse = $this->getHttpResponse().

Namestitev in zahteve

Nette\Http\Response

Za razliko od Nette\Http\Request je ta objekt spremenljiv, zato lahko za spremembo stanja, tj. za pošiljanje glave, uporabite nastavitve. Ne pozabite, da je treba vse nastavljalnike poklicati, preden se pošlje dejanski izhod. Metoda isSent() pove, ali je bil izhod poslan. Če vrne true, vsak poskus pošiljanja glave vrže izjemo Nette\InvalidStateException.

setCode(int $code, ?string $reason=null)

Spremeni odzivno kodo stanja. Za boljšo berljivost izvorne kode je priporočljivo uporabljati vnaprej določene konstante namesto dejanskih številk.

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

getCode(): int

Vrne kodo stanja odgovora.

isSent(): bool

Vrne, ali so bile glave že poslane iz strežnika v brskalnik, zato ni več mogoče pošiljati glav ali spreminjati kode stanja.

setHeader(string $name, string $value)

Pošlje glavo HTTP in prepiše prej poslano glavo z istim imenom.

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

addHeader(string $name, string $value)

Pošlje glavo HTTP in ne prepiše prej poslane glave z istim imenom.

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

deleteHeader(string $name)

Izbriše predhodno poslano glavo HTTP.

getHeader(string $header): ?string

Vrne poslano glavo HTTP ali null, če ne obstaja. Pri parametru se ne razlikujejo velike in male črke.

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

getHeaders(): array

Vrne vse poslane glave HTTP kot asociativno polje.

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

setContentType(string $type, ?string $charset=null)

Pošlje glavo Content-Type.

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

redirect(string $url, int $code=self::S302_Found)void

preusmeri na drug naslov URL. Nato ne pozabite zaključiti skripte.

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

setExpiration(?string $time)

Določi potek veljavnosti dokumenta HTTP z uporabo glave Cache-Control in Expires. Parameter je bodisi časovni interval (kot besedilo) bodisi null, ki onemogoči predpomnjenje.

// predpomnilnik brskalnika poteče čez eno uro
$httpResponse->setExpiration('1 hour');

sendAsFile(string $fileName)

Odgovor je treba prenesti s pogovornim oknom Shrani kot z določenim imenom. Sam ne pošilja nobene datoteke v izhod.

$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)

Pošlje piškotek. Privzete vrednosti parametrov:

$path '/' s področjem uporabe za vse poti v (pod)domeni (nastavljivo)
$domain null s področjem uporabe trenutne (pod)domene, vendar ne njenih poddomen (nastavljivo)
$secure true če spletno mesto deluje v HTTPS, sicer false (nastavljivo)
$httpOnly true piškotek ni dostopen za JavaScript
$sameSite 'Lax' piškotka ni treba poslati, če do njega dostopate iz drugega izvora

Privzete vrednosti parametrov $path, $domain in $secure lahko spremenite v konfiguraciji.

Čas lahko določite kot število sekund ali niz:

$httpResponse->setCookie('lang', 'en', '100 days');

Možnost $domain določa, katere domene (izvori) lahko sprejmejo piškotke. Če ni določena, piškotek sprejme ista (pod)domena, kot je določena z njo, razen njihovih poddomen. Če je določena možnost $domain, so vključene tudi poddomene. Zato je navedba $domain manj omejujoča kot opustitev. Če je na primer $domain = 'nette.org', je piškotek na voljo tudi na vseh poddomenah, kot je doc.nette.org.

Za vrednost $sameSite lahko uporabite konstante Response::SameSiteLax, SameSiteStrict in SameSiteNone.

deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null)void

Izbriše piškotek. Privzete vrednosti parametrov so:

  • $path s področjem uporabe za vse imenike ('/')
  • $domain s področjem uporabe trenutne (pod)domene, vendar ne njenih poddomen
  • Na $secure vplivajo nastavitve v konfiguraciji#HTTP piškotek
$httpResponse->deleteCookie('lang');