Cachování na straně klienta

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dundee
Člen | 23
+
0
-

Ahoj,
koukal jsem, že metoda $presenter->lastModified, kterou se doporučuje používat v
https://forum.nette.org/…html-vystupu
byla označena jako deprecated, ale nenašel jsem adekvátní náhradu se stejnou funcionalitou.

Jaké je teď doporučení pro nastavení cachování na straně klienta?

Má si člověk pokaždé zduplikovat její funcionalitu?

<?php
$this->getHttpResponse()->setExpiration($expire);

if (!$this->getHttpContext()->isModified($lastModified, $etag)) {
	$this->terminate();
}
?>
Tomáš Kolinger
Člen | 136
+
0
-

Nevím jistě ale vypadá to, jak kdyby úmyslem bylo zbavení závislosti Presenteru na Nette\Http\Response. Tudíž náhrada má být to, že si injectneš Nette\Http\Response a tam teprve zavoláš setExpiration()

dundee
Člen | 23
+
0
-

Vzhledem k tomu, že metoda getHttpResponse v presenteru jako deprecated označena není, tak bych řekl, že tím to nebude.

Jako deprecated byla metoda označena v commitu a7b9dd952619787261735bfb296ee999827b8f1d, který zavádí HttpContext, takže se má asi místo toho používat tahle třída, ale ta neobsahuje celou funkcionalitu původní metody.

Tomáš Kolinger
Člen | 136
+
0
-

Máš pravdu, v masteru se http context injectne přes injectPrimary(). Takže getHttpContext() (ani jiné) nezmizí.

Každopádně HttpContext se o to sám postarat nemůže, jelikož neumí zabít response. Takže nakonec skončíš zase v Presenteru :). Jen si to očividně musíš udělat „ručně“, což bude mnohem jasnější, jelikož název lastModified() vůbec neříká, co metoda doopravdy dělá.

Editoval Tomáš Kolinger (26. 2. 2013 12:08)