Respuesta HTTP

Nette encapsula la respuesta HTTP en objetos con una API comprensible a la vez que proporciona un filtro de desinfección.

Una respuesta HTTP es un objeto Nette\Http\Response, que se obtiene pasándolo mediante inyección de dependencia. En los presentadores basta con llamar a $httpResponse = $this->getHttpResponse().

Instalación y requisitos

Nette\Http\Response

A diferencia de Nette\Http\Request, este objeto es mutable, por lo que puede utilizar setters para cambiar el estado, es decir, para enviar cabeceras. Recuerde que todos los setters deben ser llamados antes de que cualquier salida real sea enviada. El método isSent() dice si la salida ha sido enviada. Si devuelve true, cada intento de enviar una cabecera lanza una excepción Nette\InvalidStateException.

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

Cambia un código de estado de respuesta. Para una mejor legibilidad del código fuente se recomienda utilizar constantes predefinidas en lugar de números reales.

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

getCode(): int

Devuelve el código de estado de la respuesta.

isSent(): bool

Devuelve si las cabeceras ya han sido enviadas desde el servidor al navegador, por lo que ya no es posible enviar cabeceras o cambiar el código de estado.

setHeader(string $name, string $value)

Envía una cabecera HTTP y sobrescribe la cabecera previamente enviada con el mismo nombre.

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

addHeader(string $name, string $value)

Envía una cabecera HTTP y no sobrescribe la cabecera del mismo nombre enviada anteriormente.

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

deleteHeader(string $name)

Elimina una cabecera HTTP enviada previamente.

getHeader(string $header): ?string

Devuelve la cabecera HTTP enviada, o null si no existe. El parámetro no distingue entre mayúsculas y minúsculas.

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

getHeaders(): array

Devuelve todas las cabeceras HTTP enviadas como matriz asociativa.

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

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

Envía la cabecera Content-Type.

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

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

Redirige a otra URL. No olvides salir del script entonces.

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

setExpiration(?string $time)

Establece la caducidad del documento HTTP utilizando las cabeceras Cache-Control y Expires. El parámetro es un intervalo de tiempo (como texto) o null, que desactiva el almacenamiento en caché.

// la caché del navegador caduca en una hora
$httpResponse->setExpiration('1 hour');

sendAsFile(string $fileName)

La respuesta debe descargarse con el diálogo Guardar como con el nombre especificado. No envía ningún archivo en sí a la salida.

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

Envía una cookie. Valores por defecto de los parámetros:

$path '/' con alcance a todas las rutas del (sub)dominio (configurable)
$domain null con alcance al (sub)dominio actual, pero no a sus subdominios (configurable)
$secure true si el sitio funciona con HTTPS; en caso contrario, false (configurable).
$httpOnly true cookie es inaccesible para JavaScript
$sameSite 'Lax' cookie no tiene que ser enviada cuando se accede desde otro origen

Puede cambiar los valores por defecto de los parámetros $path, $domain y $secure en configuration.

El tiempo puede especificarse como número de segundos o como una cadena:

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

La opción $domain determina qué dominios (orígenes) pueden aceptar cookies. Si no se especifica, la cookie es aceptada por el mismo (sub)dominio que la establece, excluyendo sus subdominios. Si se especifica $domain, también se incluyen los subdominios. Por lo tanto, especificar $domain es menos restrictivo que omitirlo. Por ejemplo, si $domain = 'nette.org', cookie también está disponible en todos los subdominios como doc.nette.org.

Puede utilizar las constantes Response::SameSiteLax, SameSiteStrict y SameSiteNone para el valor $sameSite.

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

Elimina una cookie. Los valores por defecto de los parámetros son

  • $path con alcance a todos los directorios ('/')
  • $domain con alcance al (sub)dominio actual, pero no a sus subdominios
  • $secure se ve afectado por los ajustes en configuration
$httpResponse->deleteCookie('lang');
versión: 4.0