Jak invalidovat cache šablony

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

Prosím o pomoc s invalidováním cache šablony pomocí tagů. V modelu mám instanci Nette\Caching\Cache a cachuji si data z databáze a nyní bych chtěl cachovat ještě výpis těchto dat v šablonách.

Jak pak v modelu pomocí té instance Cache invalidovat cache šablon pomocí tagů v metodách, kde je to potřeba? Díky

frosty22
Člen | 373
+
0
-

Zrovna mě tohle taky zajímalo, tak jsem se podíval trošku do střev nette https://github.com/…cheMacro.php#L110

A instance Cache se vytváří v onom makru a jako storage používá tedy storage nastavený v kontajneru, čili to vypadá, že bohužel není jiná cesta než si vytvořit objekt Cache znovu se stejným namespacem a předáním stejného storage, čili v konfigu:

services:
	myService: MyService(Nette\Caching\Cache(..., "Nette.Templating.Cache"))

(snad jsem to napsal správně)

A tímto si své službě MyService předáš instanci, kterou lze invalidovat tagy:

class MyService {

	public function __construct(Nette\Caching\Cache $cache)
	{
		$cache->clean(array(
    			Cache::TAGS => array("articles", "comments"),
		));
	}

}

Ovlivní tedy v šabloně:

{cache tags => [articles]}
<p>Články</p>
{/cache}

Je to nástřel, jak to snad funguje, ale tedy osobně se mi moc znovu vytváření instance Cache nelíbí, chápu tedy, že to v tuto chvíli jinak nejde, ale podle mě by bylo hezčí mít ten objekt dostupný v konfigurátoru pod klíčem třeba templateCache, a předávat ten objekt Cache, jak tomu makru, tak potom i tedy bys mohl té službě.

Ale to již je na jinou diskuzi vývoje nette a něco podobného se řeší i zde https://forum.nette.org/…factory-todo

A propo spíše bych vůbec tags nepodporoval v makru cache v šabloně, aby se nemuselo takto přistupovat k invalidaci.

Editoval frosty22 (26. 8. 2013 13:01)

vitush93
Člen | 33
+
0
-

teda takový bypass jsem nečekal. dokumentace v tomhle případě trochu mlží

Díky za odpověď. Ze zvědavosti vyzkouším, ale implementovavat to asi nebudu – taky se mi to nelibi :D