HTTP Yanıtı
Nette, HTTP yanıtını anlaşılır bir API'ye sahip nesneler içinde kapsüller.
HTTP yanıtı Nette\Http\Response nesnesi tarafından
temsil edilir. Nette ile çalışıyorsanız, bu nesne framework tarafından otomatik olarak oluşturulur ve bağımlılık enjeksiyonu aracılığıyla size
iletilmesini sağlayabilirsiniz. Presenter'larda sadece $this->getHttpResponse()
metodunu çağırmanız
yeterlidir.
Nette\Http\Response
Nesne, Nette\Http\Request aksine değiştirilebilirdir (mutable), yani
ayarlayıcılar kullanarak durumu değiştirebilirsiniz, örneğin başlıkları gönderebilirsiniz. Tüm ayarlayıcıların
herhangi bir çıktı gönderilmeden önce çağrılması gerektiğini unutmayın. Çıktının zaten gönderilip
gönderilmediğini isSent()
metodu söyler. true
döndürürse, başlık göndermeye yönelik her
girişim Nette\InvalidStateException
istisnası atar.
setCode (int $code, ?string $reason=null)
Yanıt kodu durumunu değiştirir. Kaynak kodunun daha iyi anlaşılması için, kod için sayılar yerine önceden tanımlanmış sabitler kullanmanızı öneririz.
$httpResponse->setCode(Nette\Http\Response::S404_NotFound);
getCode(): int
Yanıtın durum kodunu döndürür.
isSent(): bool
Başlıkların sunucudan tarayıcıya zaten gönderilip gönderilmediğini ve dolayısıyla artık başlık göndermenin veya durum kodunu değiştirmenin mümkün olup olmadığını döndürür.
setHeader (string $name, string $value)
Bir HTTP başlığı gönderir ve daha önce gönderilen aynı addaki başlığın üzerine yazar.
$httpResponse->setHeader('Pragma', 'no-cache');
addHeader (string $name, string $value)
Bir HTTP başlığı gönderir ve daha önce gönderilen aynı addaki başlığın üzerine yazmaz.
$httpResponse->addHeader('Accept', 'application/json');
$httpResponse->addHeader('Accept', 'application/xml');
deleteHeader (string $name)
Daha önce gönderilen bir HTTP başlığını siler.
getHeader (string $header): ?string
Gönderilen HTTP başlığını veya böyle bir başlık yoksa null
döndürür. Parametre büyük/küçük harfe
duyarsızdır.
$pragma = $httpResponse->getHeader('Pragma');
getHeaders(): array
Gönderilen tüm HTTP başlıklarını ilişkisel bir dizi olarak döndürür.
$headers = $httpResponse->getHeaders();
echo $headers['Pragma'];
setContentType (string $type, ?string $charset=null)
Content-Type
başlığını değiştirir.
$httpResponse->setContentType('text/plain', 'UTF-8');
redirect (string $url, int $code=self::S302_Found): void
Başka bir URL'ye yönlendirir. Ardından betiği sonlandırmayı unutmayın.
$httpResponse->redirect('http://example.com');
exit;
setExpiration (?string $time)
Cache-Control
ve Expires
başlıklarını kullanarak HTTP belgesinin sona erme süresini ayarlar.
Parametre ya bir zaman aralığıdır (metin olarak) ya da null
'dır, bu da önbelleğe almayı devre dışı
bırakır.
// tarayıcı önbelleği bir saat içinde sona erecek
$httpResponse->setExpiration('1 hour');
sendAsFile (string $fileName)
Yanıt, belirtilen ad altında Farklı Kaydet iletişim kutusu kullanılarak indirilecektir. Dosyanın kendisini göndermez.
$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)
Bir çerez gönderir. Parametrelerin varsayılan değerleri:
$path |
'/' |
çerez, (alt) alan adındaki tüm yollarda kapsama sahiptir (yapılandırılabilir) |
$domain |
null |
bu, geçerli (alt) alan adında kapsama sahip olduğu, ancak alt alan adlarında olmadığı anlamına gelir (yapılandırılabilir) |
$secure |
true |
web sitesi HTTPS üzerinde çalışıyorsa, aksi takdirde false (yapılandırılabilir) |
$httpOnly |
true |
çerez JavaScript için erişilemez |
$sameSite |
'Lax' |
çerez başka bir alan adından erişim sırasında gönderilmeyebilir |
$path
, $domain
ve $secure
parametrelerinin varsayılan değerlerini yapılandırma içinde değiştirebilirsiniz.
Zaman, saniye sayısı veya bir dize olarak belirtilebilir:
$httpResponse->setCookie('lang', 'tr', '100 days'); // 'cs' changed to 'tr' as an example
$domain
parametresi, hangi alan adlarının çerezi kabul edebileceğini belirtir. Belirtilmezse, çerez onu
ayarlayan aynı (alt) alan adı tarafından kabul edilir, ancak alt alan adları tarafından değil. $domain
belirtilirse, alt alan adları da dahil edilir. Bu nedenle, $domain
belirtmek, atlamaktan daha az
kısıtlayıcıdır. Örneğin, $domain = 'nette.org'
ile çerezler doc.nette.org
gibi tüm alt alan
adlarında da kullanılabilir.
$sameSite
değeri için Response::SameSiteLax
, Response::SameSiteStrict
ve
Response::SameSiteNone
sabitlerini kullanabilirsiniz.
deleteCookie (string $name, ?string $path=null, ?string $domain=null, ?bool $secure=null): void
Bir çerezi siler. Parametrelerin varsayılan değerleri şunlardır:
$path
tüm dizinlerde kapsama sahip ('/'
)$domain
geçerli (alt) alan adında kapsama sahip, ancak alt alan adlarında değil$secure
, yapılandırma içindeki ayarlara göre yönetilir
$httpResponse->deleteCookie('lang');