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');
версия: 4.0