Nette\Caching\Cache invalidace podle tagu v template
- saimons
- Člen | 293
Chtel bych se zeptat na to jak invalidovat cache vytvorenou v template z modelu. Mam oznaceny blok pomoci {cache $key, tags ⇒ [prepocet]} a pri zjisteni novych dat bych tuto cache v modelu chtel invalidovat podle tagu. Ale nevim jak si vytvorim instanci Nette\Caching\Cache? Co bude obsahovat druhy parametr namespace?
- Zax
- Člen | 370
Psáno z hlavy a možná blbě (v šablonách obvykle necachuji, spíš cachuji rovnou vytažená data z modelu), ale za pokus to stojí ;-)
protected $cache;
public function __construct(Nette\Caching\IStorage $cache) {
$this->cache = new Nette\Caching\Cache($cache);
}
public function invalidateTemplateCache() {
$this->cache->clean(array(
Nette\Caching\Cache::TAGS => array('prepocet')
));
}
Tuším, že v případě cache v šablonách můžeš Namespace vynechat. Slouží hlavně pro zamezení kolizí kdybys potřeboval ukládat do cache mimo šablonu (co Namespace, to jedna složka). Dokonce mám pocit, že ať uvedeš jakýkoliv namespace, vůbec se při mazání nezohledňuje (jen při ukládání).
IMHO je práce s cache trošku zmatečná, ale invalidace pomocí tagů mi vždycky fungovala. Doufám, že mě tu někdo z profíků doplní/opraví.
Editoval Zax (6. 6. 2014 20:54)
- besanek
- Člen | 128
Dokonce nemusíš ani vytvářet cache. Můžeš zavolat clean přímo na storage.
protected $storage;
public function __construct(Nette\Caching\IStorage $storage) {
$this->storage = $storage;
}
public function invalidateTemplateCache() {
$this->storage->clean(array(
Nette\Caching\Cache::TAGS => array('prepocet')
));
}