Invalidace cache latte šablony z jiného prezenteru

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

Ahoj,

snažím se invalidovat cache šablony pomocí tagů. Když to dělám v dotyčném prezenteru, stačí zavolat

$cache = new Cache($this->template->getCacheStorage(), 'Nette.FileTemplate');
$this->clean(array(
    Cache::TAGS => array("obdobi","vypis_prihlasek"),
));

ovšem v jiném prezenteru (navíc v jiném modulu, a sice backendu) nejspíš nedokážu správně získat dotyčnou cache šablony.

Zkoušel jsem

$template = new Nette\Templating\FileTemplate(ROOT_DIR . '/app/FrontModule/templates/Kurz/default.latte');
$cache = new Cache($template->getCacheStorage(), 'Nette.FileTemplate');

a taky

$cache = new Cache($this->presenter['Front:Kurz']->template->getCacheStorage(), 'Nette.FileTemplate');

což navíc vyhazuje, že komponenta neexistuje (nevím, jak na prezenter správně odkázat).

Díky za případnou pomoc.

Myiyk
Člen | 321
+
-2
-

Aby jsi mohl smazat cache z šablon podle tagů, tak se nemusíš připojit na stejný jmenný prostor.

V config.neon si dej

services:
	- Nette\Caching\Cache

A v BasePresenter

/** @var Nette\Caching\Cache */
	private $cache;

	public function getCache()
	{
		return $this->cache;
	}

	function __construct(\Nette\DI\Container $c)
	{
		parent::__construct();
		$this->cache = new \Nette\Caching\Cache($c->getByType("Nette\Caching\IStorage"));
	}

A potom bude ve všech presenter které od něj dědí možno mazat cache pomocí

$this->cache->clean(array(
    Cache::TAGS => array("obdobi","vypis_prihlasek"),
));

Editoval Myiyk (8. 11. 2014 14:19)

Blaueminence
Člen | 31
+
0
-

Díky moc, funguje to! Mohly za to i další chyby, ale šlo mi o tohle, díky.

st3n
Člen | 1
+
0
-

zdravim
pouzil sem stejny kod u sebe a kdyz se snazim pracovat s promennou cache ci uz v base nebo jinych presenterech porad nemam cache objekt ale jen null (chyba-non object)
skousel jsem uz vsechno

Myiyk napsal(a):

Aby jsi mohl smazat cache z šablon podle tagů, tak se nemusíš připojit na stejný jmenný prostor.

V config.neon si dej

services:
	- Nette\Caching\Cache

A v BasePresenter

/** @var Nette\Caching\Cache */
	private $cache;

	public function getCache()
	{
		return $this->cache;
	}

	function __construct(\Nette\DI\Container $c)
	{
		parent::__construct();
		$this->cache = new \Nette\Caching\Cache($c->getByType("Nette\Caching\IStorage"));
	}

A potom bude ve všech presenter které od něj dědí možno mazat cache pomocí

$this->cache->clean(array(
    Cache::TAGS => array("obdobi","vypis_prihlasek"),
));