Jak invalidovat cache šablony
- vitush93
- Člen | 33
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
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)