Risposta HTTP
Nette incapsula la risposta HTTP in oggetti con un'API comprensibile e fornisce un filtro di sanificazione.
Una risposta HTTP è un oggetto Nette\Http\Response,
che si ottiene passandoglielo tramite dependency
injection. Nei presentatori è sufficiente chiamare $httpResponse = $this->getHttpResponse()
.
Nettezza Http Risposta
A differenza di Nette\Http\Request, questo oggetto è mutabile, quindi si
possono usare i setter per cambiare lo stato, cioè per inviare le intestazioni. Ricordare che tutti i setter devono essere
chiamati prima dell'invio di qualsiasi output effettivo. Il metodo isSent()
dice se l'output è stato inviato. Se
restituisce true
, ogni tentativo di inviare un'intestazione lancia un'eccezione
Nette\InvalidStateException
.
setCode (int $code, string $reason=null)
Cambia un codice di risposta di stato. Per una migliore leggibilità del codice sorgente, si consiglia di utilizzare costanti predefinite anziché numeri reali.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Restituisce il codice di stato della risposta.
isSent(): bool
Restituisce se le intestazioni sono già state inviate dal server al browser, quindi non è più possibile inviare intestazioni o modificare il codice di stato.
setHeader (string $name, string $value)
Invia un'intestazione HTTP e sovrascrive l'intestazione dello stesso nome inviata in precedenza.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Invia un'intestazione HTTP e non sovrascrive l'intestazione dello stesso nome inviata in precedenza.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Elimina un'intestazione HTTP precedentemente inviata.
getHeader (string $header): ?string
Restituisce l'intestazione HTTP inviata o null
se non esiste. Il parametro non fa distinzione tra maiuscole e
minuscole.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Restituisce tutte le intestazioni HTTP inviate come array associativo.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, string $charset=null)
Invia l'intestazione Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Reindirizza a un altro URL. Non dimenticare di chiudere lo script.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Imposta la scadenza del documento HTTP utilizzando le intestazioni Cache-Control
e Expires
. Il
parametro è un intervallo di tempo (come testo) o null
, che disabilita la cache.
// la cache del browser scade tra un'ora
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
La risposta deve essere scaricata con la finestra di dialogo Salva con nome con il nome specificato. Non invia alcun file in uscita.
$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)
Invia un cookie. Valori predefiniti dei parametri:
$path |
'/' |
con estensione a tutti i percorsi del (sotto)dominio (configurabile) |
$domain |
null |
con l'ambito del (sotto)dominio corrente, ma non dei suoi sottodomini (configurabile) |
$secure |
true |
se il sito funziona su HTTPS, altrimenti false (configurabile) |
$httpOnly |
true |
il cookie è inaccessibile a JavaScript |
$sameSite |
'Lax' |
il cookie non deve essere inviato quando si accede da un'altra origine |
È possibile modificare i valori predefiniti dei parametri $path
, $domain
e $secure
in
configuration#HTTP cookie.
Il tempo può essere specificato come numero di secondi o come stringa:
$httpResponse->setCookie('lang', 'en', '100 days');
L'opzione $domain
determina quali domini (origini) possono accettare i cookie. Se non viene specificata, il
cookie viene accettato dallo stesso (sotto)dominio impostato, esclusi i sottodomini. Se viene specificato $domain
,
sono inclusi anche i sottodomini. Pertanto, specificare $domain
è meno restrittivo che ometterlo. Ad esempio, se
$domain = 'nette.org'
, il cookie è disponibile anche su tutti i sottodomini come doc.nette.org
.
È possibile utilizzare le costanti Response::SameSiteLax
, SameSiteStrict
e SameSiteNone
per il valore $sameSite
.
deleteCookie (string $name, string $path=null, string $domain=null, bool $secure=null): void
Elimina un cookie. I valori predefiniti dei parametri sono:
$path
con estensione a tutte le directory ('/'
)$domain
con ambito del (sotto)dominio corrente, ma non dei suoi sottodomini$secure
è influenzato dalle impostazioni in configurazione#HTTP cookie
$httpResponse->deleteCookie('lang');