Resposta HTTP
Nette encapsula a resposta HTTP em objetos com uma API compreensível.
A resposta HTTP é representada pelo objeto Nette\Http\Response. Se trabalha com Nette, este objeto é
criado automaticamente pelo framework e pode recebê-lo por meio de injeção de dependência. Nos presenters, basta
chamar o método $this->getHttpResponse()
.
Nette\Http\Response
O objeto, ao contrário de Nette\Http\Request, é mutável, ou seja,
usando setters pode alterar o estado, por exemplo, enviar cabeçalhos. Lembre-se de que todos os setters devem ser chamados
antes de enviar qualquer saída. Se a saída já foi enviada é indicado pelo método isSent()
. Se retornar
true
, qualquer tentativa de enviar um cabeçalho lançará a exceção Nette\InvalidStateException
.
setCode (int $code, ?string $reason=null)
Altera o código de status da resposta. Para melhor clareza do código-fonte, recomendamos usar constantes predefinidas em vez de números para o código.
$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 e, 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 sobrescreve um cabeçalho enviado anteriormente com o mesmo nome.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Envia um cabeçalho HTTP e não sobrescreve um cabeçalho enviado anteriormente com o mesmo nome.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Exclui um cabeçalho HTTP enviado anteriormente.
getHeader (string $header): ?string
Retorna o cabeçalho HTTP enviado ou null
se não existir. O parâmetro é insensível a
maiúsculas/minúsculas.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Retorna todos os cabeçalhos HTTP enviados como um array associativo.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Altera o cabeçalho Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Redireciona para outra URL. Lembre-se de encerrar o script depois.
$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
, que desativa o cache.
// o cache no navegador expirará em uma hora
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
A resposta será baixada usando a caixa de diálogo Salvar como com o nome fornecido. O ficheiro em si não é enviado.
$httpResponse->sendAsFile('fatura.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. Os valores padrão dos parâmetros são:
$path |
'/' |
o cookie tem alcance para todos os caminhos no (sub)domínio (configurável) |
$domain |
null |
o que significa com alcance para o (sub)domínio atual, mas não seus subdomínios (configurável) |
$secure |
true |
se o site estiver rodando em HTTPS, caso contrário false (configurável) |
$httpOnly |
true |
o cookie é inacessível para JavaScript |
$sameSite |
'Lax' |
o cookie pode não ser enviado durante o acesso de outro domínio |
Os valores padrão dos parâmetros $path
, $domain
e $secure
podem ser alterados na configuração.
O tempo pode ser especificado como um número de segundos ou uma string:
$httpResponse->setCookie('lang', 'pt', '100 days'); // Traduzido 'cs' para 'pt' como exemplo
O parâmetro $domain
determina quais domínios podem aceitar o cookie. Se não for especificado, o cookie é
aceito pelo mesmo (sub)domínio que o definiu, mas não por seus subdomínios. Se $domain
for especificado, os
subdomínios também são incluídos. Portanto, especificar $domain
é menos restritivo do que omiti-lo. Por exemplo,
com $domain = 'nette.org'
, os cookies também estão disponíveis em todos os subdomínios como
doc.nette.org
.
Para o valor $sameSite
, pode usar as constantes Response::SameSiteLax
, SameSiteStrict
e
SameSiteNone
.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Exclui um cookie. Os valores padrão dos parâmetros são:
$path
com alcance para todos os diretórios ('/'
)$domain
com alcance para o (sub)domínio atual, mas não seus subdomínios$secure
é regido pelas configurações na configuração
$httpResponse->deleteCookie('lang');