HTTP válasz
A Nette a HTTP választ érthető API-val rendelkező objektumokba zárja.
A HTTP választ a Nette\Http\Response objektum
képviseli. Ha a Nette-tel dolgozik, ezt az objektumot a keretrendszer automatikusan létrehozza, és dependency injection segítségével átadhatja
magának. A presenterekben elég csak a $this->getHttpResponse()
metódust meghívni.
Nette\Http\Response
Az objektum, ellentétben a Nette\Http\Request-tel, mutable
(megváltoztatható), tehát setterek segítségével megváltoztathatja az állapotot, például fejléceket küldhet. Ne
felejtse el, hogy minden settert bármilyen kimenet elküldése előtt kell meghívni. Azt, hogy a kimenet már
elküldésre került-e, az isSent()
metódus árulja el. Ha true
-t ad vissza, minden fejléc küldési
kísérlet Nette\InvalidStateException
kivételt vált ki.
setCode (int $code, ?string $reason=null)
Megváltoztatja a válasz állapotkódját. A forráskód jobb érthetősége érdekében javasoljuk, hogy a kódhoz számok helyett előre definiált konstansokat használjon.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Visszaadja a válasz állapotkódját.
isSent(): bool
Visszaadja, hogy a fejlécek már elküldésre kerültek-e a szerverről a böngészőbe, és így már nem lehet fejléceket küldeni vagy az állapotkódot megváltoztatni.
setHeader (string $name, string $value)
Elküld egy HTTP fejlécet és felülírja a korábban elküldött, azonos nevű fejlécet.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Elküld egy HTTP fejlécet és nem írja felül a korábban elküldött, azonos nevű fejlécet.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Törli a korábban elküldött HTTP fejlécet.
getHeader (string $header): ?string
Visszaadja az elküldött HTTP fejlécet vagy null
-t, ha ilyen nem létezik. A paraméter kis- és nagybetű
érzéketlen.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Visszaadja az összes elküldött HTTP fejlécet asszociatív tömbként.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Megváltoztatja a Content-Type
fejlécet.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Átirányít egy másik URL-re. Ne felejtse el utána leállítani a szkriptet.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Beállítja a HTTP dokumentum lejáratát a Cache-Control
és Expires
fejlécek segítségével.
A paraméter vagy egy időintervallum (szövegként), vagy null
, ami letiltja a gyorsítótárazást.
// a böngésző gyorsítótára egy óra múlva lejár
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
A választ a Mentés másként párbeszédablak segítségével tölti le a megadott néven. Magát a fájlt nem küldi el.
$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)
Elküld egy cookie-t. A paraméterek alapértelmezett értékei:
$path |
'/' |
a cookie hatóköre az összes útvonalra kiterjed a (sub)domainen (konfigurálható) |
$domain |
null |
ami azt jelenti, hogy a hatókör az aktuális (sub)domainre terjed ki, de nem annak aldomainjeire (konfigurálható) |
$secure |
true |
ha a webhely HTTPS-en fut, egyébként false (konfigurálható) |
$httpOnly |
true |
a cookie JavaScript számára nem hozzáférhető |
$sameSite |
'Lax' |
a cookie nem feltétlenül kerül elküldésre más domainről való hozzáférés esetén |
A $path
, $domain
és $secure
paraméterek alapértelmezett értékeit megváltoztathatja
a konfigurációban.
Az időt megadhatja másodpercek számaként vagy stringként:
$httpResponse->setCookie('lang', 'cs', '100 days');
A $domain
paraméter meghatározza, mely domainek fogadhatják el a cookie-t. Ha nincs megadva, a cookie-t ugyanaz
a (sub)domain fogadja el, amelyik beállította, de nem annak aldomainjei. Ha a $domain
meg van adva, az aldomainek
is beletartoznak. Ezért a $domain
megadása kevésbé korlátozó, mint annak elhagyása. Például a
$domain = 'nette.org'
esetén a cookie-k minden aldomainen, mint például a doc.nette.org
, is
elérhetők.
A $sameSite
értékhez használhatja a Response::SameSiteLax
, Response::SameSiteStrict
és Response::SameSiteNone
konstansokat.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Törli a cookie-t. A paraméterek alapértelmezett értékei:
$path
hatókörrel az összes könyvtárra ('/'
)$domain
hatókörrel az aktuális (sub)domainre, de nem annak aldomainjeire$secure
a konfigurációban beállítottak szerint
$httpResponse->deleteCookie('lang');