Resposta HTTP
Nette encapsula a resposta HTTP em objetos com uma API compreensível enquanto fornece um filtro de sanitização.
Uma resposta HTTP é um objeto Nette\Http\Response,
que você obtém passando-o usando a injeção de
dependência. Nos apresentadores, basta ligar para $httpResponse = $this->getHttpResponse()
.
Nette\Http\Resposta
Unlike Nette\Http\Request, this object is mutable, so you can use setters
to change the state, ie to send headers. Lembre-se que todos os setters devem ser chamados antes que qualquer saída real seja
enviada. O método isSent()
informa se a saída foi enviada. Se ele retornar true
, cada tentativa
de enviar um cabeçalho lançará uma exceção Nette\InvalidStateException
.
setCode (int $code, ?string $reason=null)
Altera um código de resposta de status. Para melhor legibilidade do código fonte, é recomendado o uso de constantes pré-definidas em vez de números reais.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Retorna o código de status da resposta.
isSent(): bool
Retorna se os cabeçalhos já foram enviados do servidor para o navegador, portanto não é mais possível enviar cabeçalhos ou alterar o código de status.
setHeader (string $name, string $value)
Envia um cabeçalho HTTP e **sobreescritas*** cabeçalho previamente enviado com o mesmo nome.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Envia um cabeçalho HTTP e não sobrescreve cabeçalho previamente enviado com o mesmo nome.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Elimina um cabeçalho HTTP previamente enviado.
getHeader (string $header): ?string
Devolve o cabeçalho HTTP enviado, ou null
se ele não existir. O parâmetro não diferencia maiúsculas e
minúsculas de minúsculas.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Devolve todos os cabeçalhos HTTP enviados como matriz associativa.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Envia o cabeçalho Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Redireciona para outra URL. Não se esqueça de desistir do roteiro então.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Define a expiração do documento HTTP usando os cabeçalhos Cache-Control
e Expires
. O parâmetro
é um intervalo de tempo (como texto) ou null
, o que desativa o cache.
// o cache do navegador expira em uma hora
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
A resposta deve ser baixada com Salvar como diálogo com nome especificado. Ele próprio não envia nenhum arquivo para a saída.
$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)
Envia um cookie. Valores de parâmetros padrão:
$path |
'/' |
com escopo para todos os caminhos no (sub)domínio (configurável) |
$domain |
null |
com escopo do (sub)domínio atual, mas não de seus subdomínios (configurável) |
$secure |
true |
se o site estiver rodando em HTTPS, caso contrário false (configurável) |
$httpOnly |
true |
cookie é inacessível ao JavaScript |
$sameSite |
'Lax' |
cookie não tem que ser enviado quando acessado de outra origem |
Você pode alterar os valores padrão dos parâmetros $path
, $domain
e $secure
na configuração#HTTP cookie.
O tempo pode ser especificado como número de segundos ou um fio:
$httpResponse->setCookie('lang', 'en', '100 days');
A opção $domain
determina quais domínios (origens) podem aceitar cookies. Se não especificado, o cookie é
aceito pelo mesmo (sub)domínio que é definido por ele, excluindo seus subdomínios. Se $domain
for especificado,
então os subdomínios também serão incluídos. Portanto, a especificação do $domain
é menos restritiva do que a
omissão. Por exemplo, se $domain = 'nette.org'
, o cookie também está disponível em todos os subdomínios como
doc.nette.org
.
Você pode usar as constantes Response::SameSiteLax
, SameSiteStrict
e SameSiteNone
para
o valor $sameSite
.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Elimina um cookie. Os valores padrão dos parâmetros são:
$path
com escopo para todos os diretórios ('/'
)$domain
com escopo do (sub)domínio atual, mas não de seus subdomínios$secure
é afetado pelos ajustes na configuração#HTTP cookie
$httpResponse->deleteCookie('lang');