Respuesta HTTP
Nette encapsula la respuesta HTTP en objetos con una API comprensible.
La respuesta HTTP está representada por el objeto Nette\Http\Response. Si trabaja con Nette, este objeto es
creado automáticamente por el framework y puede solicitar que se le pase mediante inyección de dependencias. En los presenters, basta
con llamar al método $this->getHttpResponse()
.
Nette\Http\Response
El objeto, a diferencia de Nette\Http\Request, es mutable, es decir, puede
cambiar el estado mediante setters, por ejemplo, enviar cabeceras. No olvide que todos los setters deben ser llamados antes de
enviar cualquier salida. Si ya se ha enviado la salida lo indica el método isSent()
. Si devuelve
true
, cualquier intento de enviar una cabecera lanzará una excepción Nette\InvalidStateException
.
setCode (int $code, ?string $reason=null)
Cambia el código de estado de la respuesta. Para una mejor legibilidad del código fuente, se recomienda utilizar constantes predefinidas en lugar de números para el código.
$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 ni cambiar el código de estado.
setHeader (string $name, string $value)
Envía una cabecera HTTP y sobrescribe una cabecera enviada previamente con el mismo nombre.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Envía una cabecera HTTP y no sobrescribe una cabecera enviada previamente con el mismo nombre.
$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 es insensible a mayúsculas/minúsculas.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Devuelve todas las cabeceras HTTP enviadas como un array asociativo.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Cambia la cabecera Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Redirige a otra URL. No olvide terminar el script después.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Establece la expiración del documento HTTP utilizando las cabeceras Cache-Control
y Expires
. El
parámetro es un intervalo de tiempo (como texto) o null
, lo que deshabilita el almacenamiento en caché.
// la caché del navegador expirará en una hora
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
La respuesta se descargará mediante el cuadro de diálogo Guardar como con el nombre especificado. El archivo en sí no se envía.
$httpResponse->sendAsFile('factura.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 |
'/' |
la cookie tiene alcance a todas las rutas en el (sub)dominio (configurable) |
$domain |
null |
lo que significa con alcance al (sub)dominio actual, pero no a sus subdominios (configurable) |
$secure |
true |
si el sitio web se ejecuta en HTTPS, de lo contrario false (configurable) |
$httpOnly |
true |
la cookie no es accesible para JavaScript |
$sameSite |
'Lax' |
la cookie puede no ser enviada al acceder desde otro dominio |
Puede cambiar los valores predeterminados de los parámetros $path
, $domain
y $secure
en
la configuración.
El tiempo se puede especificar como un número de segundos o una cadena:
$httpResponse->setCookie('lang', 'es', '100 days');
El parámetro $domain
determina qué dominios pueden aceptar la cookie. Si no se especifica, la cookie es aceptada
por el mismo (sub)dominio que la estableció, pero no por sus subdominios. Si se especifica $domain
, también se
incluyen los subdominios. Por lo tanto, especificar $domain
es menos restrictivo que omitirlo. Por ejemplo, con
$domain = 'nette.org'
, las cookies también están disponibles en todos los subdominios como
doc.nette.org
.
Para el valor $sameSite
, puede usar las constantes Response::SameSiteLax
, SameSiteStrict
y SameSiteNone
.
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 nikoliv sus subdominios$secure
se rige por la configuración en configuración
$httpResponse->deleteCookie('lang');