Ivalidace cache šablony z presenteru
- bojovyletoun
- Člen | 667
v prvé řadě mazat cache a ne storage. instanci keše máš pravdepodobně někde uloženou, takže
$this->cache->clean
{cache $id, tags
PS: Mám pocit, že by se hodilo, dát do contextu odkaz na Cache, ať se furt nemusí psát storage
- uestla
- Backer | 799
Není to špatně?
Nemá se uvolňovat na úrovni objektu Nette\Caching\Cache
a ne
až na Storage
(viz de facto o 3 příspěvky
výše)?
Jde o to, že v instanci Cache
se po načtení data rovněž
udržují, čili po vyčištění Storage je teoreticky možné v dalším
běhu programu s daty v Cache pracovat (neboť v paměti tato data
zůstala).
Já při hledání řešení postupoval takhlenc:
- Latte makro
{cache /}
: https://api.nette.org/…cro.php.html#55 - vidíme tam proměnnou
$netteCacheStorage
šablony – Sherlockujme dále - továrnička na šablonu Controlu: https://api.nette.org/…rol.php.html#77
- bere z kontextu
cacheStorage
, jak jsi uvedl, ale teď je nutno se obloukem vrátit k makru{cache /}
: https://api.nette.org/…cro.php.html#99 - tady se vytváří cache s namespacem
'Nette.Templating.Cache'
Čili bych se nebál (za použití této šablony:
{cache 'mojeCache', tags => ['category']}
...
{/cache}
) v presenteru volat
$cache = new Caching\Cache($this->context->cacheStorage, 'Nette.Templating.Cache');
$cache->clean(array(
\Nette\Caching\Cache::TAGS => array("category",),
));
Ale nevím… Není to ani trochu voňavé :-(
EDIT:
Tak chybička – opravil jsem získání Cache v Presenteru (jelikož
Environment
je deprecated, tak do správné podoby – vzal jsem
kód přímo z Environment::getCache()
;) ).
Editoval uestla (16. 6. 2011 16:32)
- Oggy
- Člen | 306
Ahoj, narazil jsem na podobný problém, při mazaní cache vytvořené v šabloně..
šablona:
<?php
{cache jmeno, tags => [backgrounds]}
...
{/cache}
/>
a při invalidaci v presenteru:
<?php
//$cache = new \Nette\Caching\Cache($this->context->cacheStorage, 'Nette.Templating.Cache');
$this->context->cacheStorage->clean(array(
\Nette\Caching\Cache::TAGS => array("backgrounds"),
));
?>
narážím na chybu:
Undefined index: i
…/libs/Nette/Caching/Storages/FileJournal.php:703 source ► Nette\Caching\Storages\FileJournal→ saveNode (arguments ►)
…/libs/Nette/Caching/Storages/FileJournal.php:506 source ► Nette\Caching\Storages\FileJournal→ saveNode (arguments ►)
…/libs/Nette/Caching/Storages/FileJournal.php:311 source ► Nette\Caching\Storages\FileJournal→ cleanFromIndex (arguments ►)
…/app/AdminModule/presenters/HotelPresenter.php:304 source ► Nette\Caching\Storages\FileStorage→ clean (arguments ►)
302: $this->context->cacheStorage->clean(array(
303: \Nette\Caching\Cache::TAGS ⇒ array(„backgrounds“),
304: ));
…/libs/Nette/Caching/Storages/FileStorage.php:322 source ► Nette\Caching\Storages\FileJournal→ clean (arguments ►)
…/app/AdminModule/presenters/HotelPresenter.php:304 source ► Nette\Caching\Storages\FileStorage→ clean (arguments ►)