Jak se dostat k datům od cache šablon?

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

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
+
0
-

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
+
0
-

Na co potrebujes tu stejnou cache?

Kdyztak podle API to najdes zde: https://api.nette.org/…ate.php.html#89

Myiyk
Člen | 321
+
0
-

Na co potrebujes tu stejnou cache?

Šablonu vypisuji přes texy. Využil jsem cache a ve zpracování formuláře tu cache potřebuju mazat.

Editoval Myiyk (4. 11. 2013 15:37)

Myiyk
Člen | 321
+
0
-

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.