Nette Documentation Preview

syntax
HTTP отговор
************

.[perex]
Nette капсулира HTTP отговора в обекти с ясен API, като същевременно осигурява филтър за обработка.

Отговорът на HTTP е обект [api:Nette\Http\Response], който получавате, като го предавате с помощта на [инжектиране на зависимости |dependency-injection:passing-dependencies]. В презентаторите просто извикайте `$httpResponse = $this->getHttpResponse()`.

→ [Монтаж и изисквания |@home#Installation]


Нетте\Http\Response .[#toc-nette-http-response]
===============================================

За разлика от [Nette\Http\Request |request], този обект е променлив, така че можете да използвате сетъри, за да промените състоянието, т.е. да изпратите заглавия. Не забравяйте, че всички задаващи устройства **трябва да бъдат извикани преди да бъде изпратен какъвто и да е действителен изход.** Методът `isSent()` показва дали изходът е изпратен. Ако той връща `true`, всеки опит за изпращане на заглавие хвърля изключение `Nette\InvalidStateException`.


setCode(int $code, ?string $reason=null) .[method]
--------------------------------------------------
Променя [кода на отговора на |https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10] състоянието. За по-добра четливост на изходния код се препоръчва да се използват [предварително дефинирани константи |api:Nette\Http\IResponse] вместо реални числа.

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


getCode(): int .[method]
------------------------
Връща кода на състоянието на отговора.


isSent(): bool .[method]
------------------------
Връща информация дали заглавията вече са били изпратени от сървъра към браузъра, така че вече не е възможно да се изпращат заглавия или да се променя кодът на състоянието.


setHeader(string $name, string $value) .[method]
------------------------------------------------
Изпраща HTTP хедър и **заменя** изпратения преди това хедър със същото име.

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


addHeader(string $name, string $value) .[method]
------------------------------------------------
Изпраща HTTP заглавие и **не презаписва** изпратеното преди това заглавие със същото име.

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


deleteHeader(string $name) .[method]
------------------------------------
Изтрива изпратен преди това HTTP хедър.


getHeader(string $header): ?string .[method]
--------------------------------------------
Връща изпратения HTTP хедър или `null`, ако той не съществува. Параметърът не е чувствителен към големи и малки букви.

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


getHeaders(): array .[method]
-----------------------------
Връща всички изпратени HTTP заглавия като асоциативен масив.

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


setContentType(string $type, ?string $charset=null) .[method]
-------------------------------------------------------------
Изпраща заглавието `Content-Type`.

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


redirect(string $url, int $code=self::S302_Found): void .[method]
-----------------------------------------------------------------
Пренасочва към друг URL адрес. Не забравяйте да излезете от скрипта след това.

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


setExpiration(?string $time) .[method]
--------------------------------------
Задава времето на изтичане на HTTP документ, като използва заглавията `Cache-Control` и `Expires`. Параметърът е или интервал от време (като текст), или `null`, който деактивира кеширането.

```php
// кешът на браузъра изтича след един час
$httpResponse->setExpiration('1 hour');
```


sendAsFile(string $fileName) .[method]
--------------------------------------
Отговорът трябва да бъде качен с помощта на диалоговия прозорец *Саѕе As* с посоченото име. Самият файл не се изпраща за извеждане.

```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]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Изпраща бисквитка. Стойности на параметрите по подразбиране:

| `$path` | `'/'` | с покритие на всички пътища в (под)домейна *(може да се конфигурира)*.
| `$domain` | `null` | с покритие на текущия (под)домейн, но не и на неговите поддомейни *(може да се конфигурира)*.
| `$secure` | `true` | ако сайтът работи с HTTPS, в противен случай `false` *(може да се конфигурира)*.
| `$httpOnly` | `true` | бисквитките не са налични за JavaScript
| `$sameSite` | `'Lax'` | не е необходимо да се изпраща бисквитка при [достъп от друг източник |nette:glossary#SameSite-Cookie]

Можете да промените стойностите по подразбиране за `$path`, `$domain` и `$secure` в [конфигурацията |configuration#HTTP-Cookie].

Времето може да бъде зададено като брой секунди или като низ:

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

Параметърът `$domain` определя кои домейни (на произход) могат да приемат "бисквитката". Ако параметърът не е посочен, "бисквитката" се приема от същия (под)домейн, който е посочен, с изключение на техните поддомейни. Ако е посочен `$domain`, поддомейните също се включват. Така че посочването на `$domain` е по-малко ограничително, отколкото пропускането му. Например, ако `$domain = 'nette.org'`, "бисквитката" е достъпна и на всички поддомейни като `doc.nette.org`.

Константите `Response::SameSiteLax`, `SameSiteStrict` и `SameSiteNone` могат да се използват за стойността `$sameSite`.


deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void .[method]
--------------------------------------------------------------------------------------------------------
Изтрива "бисквитката". Настройките по подразбиране имат следните стойности:
- `$path` с обхват върху всички директории (`'/'`)
- `$domain` с обхват в текущия (под)домейн, но не и в неговите поддомейни.
- `$secure` зависи от настройките в [конфигурацията |configuration#HTTP-Cookie].

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

HTTP отговор

Nette капсулира HTTP отговора в обекти с ясен API, като същевременно осигурява филтър за обработка.

Отговорът на HTTP е обект Nette\Http\Response, който получавате, като го предавате с помощта на инжектиране на зависимости. В презентаторите просто извикайте $httpResponse = $this->getHttpResponse().

Монтаж и изисквания

Нетте\Http\Response

За разлика от Nette\Http\Request, този обект е променлив, така че можете да използвате сетъри, за да промените състоянието, т.е. да изпратите заглавия. Не забравяйте, че всички задаващи устройства трябва да бъдат извикани преди да бъде изпратен какъвто и да е действителен изход. Методът isSent() показва дали изходът е изпратен. Ако той връща true, всеки опит за изпращане на заглавие хвърля изключение Nette\InvalidStateException.

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

Променя кода на отговора на състоянието. За по-добра четливост на изходния код се препоръчва да се използват предварително дефинирани константи вместо реални числа.

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

getCode(): int

Връща кода на състоянието на отговора.

isSent(): bool

Връща информация дали заглавията вече са били изпратени от сървъра към браузъра, така че вече не е възможно да се изпращат заглавия или да се променя кодът на състоянието.

setHeader(string $name, string $value)

Изпраща HTTP хедър и заменя изпратения преди това хедър със същото име.

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

addHeader(string $name, string $value)

Изпраща HTTP заглавие и не презаписва изпратеното преди това заглавие със същото име.

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

deleteHeader(string $name)

Изтрива изпратен преди това HTTP хедър.

getHeader(string $header): ?string

Връща изпратения HTTP хедър или null, ако той не съществува. Параметърът не е чувствителен към големи и малки букви.

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

getHeaders(): array

Връща всички изпратени HTTP заглавия като асоциативен масив.

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

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

Изпраща заглавието Content-Type.

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

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

Пренасочва към друг URL адрес. Не забравяйте да излезете от скрипта след това.

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

setExpiration(?string $time)

Задава времето на изтичане на HTTP документ, като използва заглавията Cache-Control и Expires. Параметърът е или интервал от време (като текст), или null, който деактивира кеширането.

// кешът на браузъра изтича след един час
$httpResponse->setExpiration('1 hour');

sendAsFile(string $fileName)

Отговорът трябва да бъде качен с помощта на диалоговия прозорец Саѕе As с посоченото име. Самият файл не се изпраща за извеждане.

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

Изпраща бисквитка. Стойности на параметрите по подразбиране:

$path '/' с покритие на всички пътища в (под)домейна (може да се конфигурира).
$domain null с покритие на текущия (под)домейн, но не и на неговите поддомейни (може да се конфигурира).
$secure true ако сайтът работи с HTTPS, в противен случай false (може да се конфигурира).
$httpOnly true бисквитките не са налични за JavaScript
$sameSite 'Lax' не е необходимо да се изпраща бисквитка при достъп от друг източник

Можете да промените стойностите по подразбиране за $path, $domain и $secure в конфигурацията.

Времето може да бъде зададено като брой секунди или като низ:

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

Параметърът $domain определя кои домейни (на произход) могат да приемат „бисквитката“. Ако параметърът не е посочен, „бисквитката“ се приема от същия (под)домейн, който е посочен, с изключение на техните поддомейни. Ако е посочен $domain, поддомейните също се включват. Така че посочването на $domain е по-малко ограничително, отколкото пропускането му. Например, ако $domain = 'nette.org', „бисквитката“ е достъпна и на всички поддомейни като doc.nette.org.

Константите Response::SameSiteLax, SameSiteStrict и SameSiteNone могат да се използват за стойността $sameSite.

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

Изтрива „бисквитката“. Настройките по подразбиране имат следните стойности:

  • $path с обхват върху всички директории ('/')
  • $domain с обхват в текущия (под)домейн, но не и в неговите поддомейни.
  • $secure зависи от настройките в конфигурацията.
$httpResponse->deleteCookie('lang');