HTTP Response
Nette incapsula la risposta HTTP in oggetti con un'API comprensibile.
La risposta HTTP è rappresentata dall'oggetto Nette\Http\Response. Se lavorate con Nette, questo oggetto
viene creato automaticamente dal framework e potete riceverlo tramite dependency injection. Nei presenter, basta chiamare
il metodo $this->getHttpResponse()
.
Nette\Http\Response
L'oggetto, a differenza di Nette\Http\Request, è mutabile, quindi potete
modificare lo stato usando i setter, ad esempio inviare header. Ricordate che tutti i setter devono essere chiamati prima di
inviare qualsiasi output. Il metodo isSent()
indica se l'output è già stato inviato. Se restituisce
true
, ogni tentativo di inviare un header lancerà un'eccezione Nette\InvalidStateException
.
setCode (int $code, ?string $reason=null)
Modifica il codice di stato della risposta. Per una migliore comprensibilità del codice sorgente, si consiglia di utilizzare le costanti predefinite per il codice invece dei numeri.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Restituisce il codice di stato della risposta.
isSent(): bool
Restituisce se gli header sono già stati inviati dal server al browser, e quindi non è più possibile inviare header o modificare il codice di stato.
setHeader (string $name, string $value)
Invia un header HTTP e sovrascrive un header precedentemente inviato con lo stesso nome.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Invia un header HTTP e non sovrascrive un header precedentemente inviato con lo stesso nome.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Elimina un header HTTP precedentemente inviato.
getHeader (string $header): ?string
Restituisce l'header HTTP inviato o null
se non esiste. Il parametro è case-insensitive.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Restituisce tutti gli header HTTP inviati come array associativo.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Modifica l'header Content-Type
.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Reindirizza a un altro URL. Non dimenticate di terminare lo script successivamente.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Imposta la scadenza del documento HTTP usando gli header Cache-Control
e Expires
. Il parametro è un
intervallo di tempo (come testo) o null
, che disabilita la cache.
// la cache nel browser scadrà tra un'ora
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
La risposta verrà scaricata tramite la finestra di dialogo Salva con nome con il nome specificato. Il file stesso non viene inviato.
$httpResponse->sendAsFile('faktura.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. I valori predefiniti dei parametri sono:
$path |
'/' |
il cookie ha scope su tutti i percorsi nel (sotto)dominio (configurabile) |
$domain |
null |
che significa con scope sul (sotto)dominio corrente, ma non sui suoi sottodomini (configurabile) |
$secure |
true |
se il sito web viene eseguito su HTTPS, altrimenti false (configurabile) |
$httpOnly |
true |
il cookie non è accessibile da JavaScript |
$sameSite |
'Lax' |
il cookie potrebbe non essere inviato durante l'accesso da un altro dominio |
I valori predefiniti dei parametri $path
, $domain
e $secure
possono essere modificati
nella configurazione.
Il tempo può essere specificato come numero di secondi o stringa:
$httpResponse->setCookie('lang', 'cs', '100 days');
Il parametro $domain
specifica quali domini possono accettare il cookie. Se non specificato, il cookie viene
accettato dallo stesso (sotto)dominio che lo ha impostato, ma non dai suoi sottodomini. Se $domain
è specificato,
vengono inclusi anche i sottodomini. Pertanto, specificare $domain
è meno restrittivo che ometterlo. Ad esempio,
con $domain = 'nette.org'
, i cookie sono disponibili anche su tutti i sottodomini come
doc.nette.org
.
Per il valore $sameSite
potete usare le costanti Response::SameSiteLax
,
Response::SameSiteStrict
e Response::SameSiteNone
.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Elimina un cookie. I valori predefiniti dei parametri sono:
$path
con scope su tutte le directory ('/'
)$domain
con scope sul (sotto)dominio corrente, ma non sui suoi sottodomini$secure
è determinato dalle impostazioni nella configurazione
$httpResponse->deleteCookie('lang');