HTTP-válasz
A Nette a HTTP-választ érthető API-val rendelkező objektumokba csomagolja, miközben szanálási szűrőt biztosít.
A HTTP-válasz egy Nette\Http\Response objektum, amelyet
függőségi injektálással történő átadással kapunk meg. Az
előadókban egyszerűen hívja meg a $httpResponse = $this->getHttpResponse()
.
Nette\Http\Response
A Nette\Http\Request-tel ellentétben ez az objektum változtatható, így az állapot
megváltoztatásához, azaz a fejlécek elküldéséhez használhatsz állítót. Ne feledje, hogy minden beállítót a
tényleges kimenet elküldése előtt kell meghívni. A isSent()
metódus megmondja, hogy a kimenet elküldésre
került-e. Ha a true
visszatér, akkor minden egyes fejléc küldési kísérlet
Nette\InvalidStateException
kivételt dob.
setCode(int $code, ?string $reason=null)
Megváltoztatja a státusz válaszkódot. A forráskód jobb olvashatósága érdekében ajánlott a tényleges számok helyett előre definiált konstansokat használni.
$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 el lettek-e küldve a szerverről a böngészőnek, í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)
HTTP fejlécet küld, és nem írja felül a korábban küldött azonos nevű fejlécet.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader(string $name)
Töröl egy korábban elküldött HTTP-fejlécet.
getHeader(string $header): ?string
Visszaadja az elküldött HTTP-fejlécet, vagy a null
, ha nem létezik. A paraméter nem érzékeny a nagy- és
kisbetűkre.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Az összes elküldött HTTP-fejlécet asszociatív tömbként adja vissza.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType(string $type, ?string $charset=null)
Elküldi 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 felejtsd el ekkor kilépni a szkriptből.
$httpResponse->redirect('http://example.com');
exit;
setExpiration(?string $time)
A HTTP-dokumentum lejárati idejének beállítása a Cache-Control
és a Expires
fejlécek
segítségével. A paraméter vagy egy időintervallum (szövegként) vagy a null
, amely kikapcsolja a
gyorsítótárazást.
// a böngésző gyorsítótár egy óra múlva lejár
$httpResponse->setExpiration('1 hour');
sendAsFile(string $fileName)
A választ a megadott nevű Save as párbeszédpanel segítségével kell letölteni. Magát a fájlt nem küldi el a kimenetre.
$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)
Cookie-t küld. Alapértelmezett paraméterértékek:
$path |
'/' |
az (al)tartomány összes elérési útvonalára kiterjedő hatállyal (konfigurálható). |
$domain |
null |
az aktuális (al)tartomány hatókörével, de az aldomainek kivételével (konfigurálható) |
$secure |
true |
ha a webhely HTTPS-en fut, egyébként false (konfigurálható) |
$httpOnly |
true |
a cookie nem hozzáférhető a JavaScript számára. |
$sameSite |
'Lax' |
a cookie-t nem kell elküldeni, ha más eredetű hozzáférésről történik. |
A $path
, $domain
és $secure
paraméterek alapértelmezett értékeit a configuration#HTTP cookie menüpontban módosíthatja.
Az idő megadható másodpercek számaként vagy karakterláncként:
$httpResponse->setCookie('lang', 'en', '100 days');
A $domain
opció határozza meg, hogy mely tartományok (származási helyek) fogadhatják el a cookie-kat. Ha
nincs megadva, akkor a cookie-t ugyanaz a (al)tartomány fogadja el, amelyik beállítja, kivéve azok aldomainjeit. Ha a
$domain
van megadva, akkor az aldomainek is bevonásra kerülnek. Ezért a $domain
megadása kevésbé
korlátozó, mint az elhagyása. Például, ha a $domain = 'nette.org'
, cookie az összes aldomainen is elérhető,
mint a doc.nette.org
.
A $sameSite
értékhez használhatja a Response::SameSiteLax
, SameSiteStrict
és
SameSiteNone
konstansokat.
deleteCookie(string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Töröl egy sütit. A paraméterek alapértelmezett értékei a következők:
$path
minden könyvtárra kiterjedő hatállyal ('/'
).$domain
az aktuális (al)tartomány hatókörével, de nem az aldomainek hatókörével.- A
$secure
értéket a konfiguráció#HTTP cookie beállításai befolyásolják.
$httpResponse->deleteCookie('lang');