Jak se dostat k datům od cache šablon?
- Myiyk
- Člen | 321
Ahoj,
mám formulář v samostatném souboru a závisloti získávám přes
konstruktor, tak jsem si taky vytáhl Nette\Caching\Cache, ale není to ta samá
cache, se kterou pracujou šablony.
(V komponentě jsem dal všechnu cache smazat a nic se nestalo, podle toho soudím, že to jede s jinými daty.)
Jak ji (resp. neon) nastavím, aby fungovala se stejnými daty?
- Eda
- Backer | 220
Já to řeším takto: mám zaregistrovanou v konfigu službu TemplateCacheBridge, která tohle řeší, a všude, kde potřebuju pracovat s keší šablon, si jí injectnu.
/**
* Nekdy potrebujeme v presenteru zjistit stav/invalidovat cache, kterou pouziva template
* Tato trida to umoznuje tim, ze vytvori cache se stejnym klicem a storage, jako to dela makro cache
*/
class TemplateCacheBridge extends \Nette\Object
{
/** @var Nette\Caching\Cache */
protected $cache;
public function __construct(\Nette\Caching\IStorage $storage)
{
$this->cache = new \Nette\Caching\Cache($storage, 'Nette.Templating.Cache');
}
/**
* @return \Nette\Caching\Cache
*/
public function getCache()
{
return $this->cache;
}
public function clean($conditions)
{
$this->cache->clean($conditions);
}
}
Ale je třeba mít na paměti, že to je tak trochu hack, který nemusí do budoucna fungovat.
Editoval Eda (4. 11. 2013 2:26)
- Felix
- Nette Core | 1270
Na co potrebujes tu stejnou cache?
Kdyztak podle API to najdes zde: https://api.nette.org/…ate.php.html#89
- Myiyk
- Člen | 321
Pořád jsem nepřišel na vhodný způsob, jak to udělat.
Ideální by bylo, kdyby cache v šabloně měla nějakou závislostní proměnnou (něco jako verze). Kdyby tato proměnná byla jiná, než pro jakou je cache vygenerovaná. Cache by se smazala a vygenerovala se nová. Tím by také nezabírala zbytečné místo.
Obdobně jako
$cache->call('gethostbyaddr', $ip); // $ip = mnou popisovaná závislostní proměnná
Ale s rozdílem že pokud bude $ip jiné, než minule. Smaže minulou cache.
Potom je ještě řešení tuto proměnnou zanést do názvu cache bloku. Ale
při nové verzi (závislostní proměnné) to nebude mazat starou cache a
systém se bude zanášet a spomalovat.
Dala by se k tomu nastavit i expirace, ale předpokládám že nette
preventivně nekontroluje soubory, takže by se nic nezměnilo.
Nastavení samotné expirace neřeší úpravu zdroje, protože když ve formuláři upravím data, tak by se cache nezměnila a celé by to bylo na …
A ještě si dovolím píchnout do dokumentace o cachování šablon, jak podle těch tagů invalidovat ???
Někdo z fóra přece na to někdy musel přijít, jak se ta invalidace pomocí tagů v šabloně používá, tak se prosím pochlubte.