Cache – funguje jen z části
- Klobás
- Člen | 113
Ahoj,
hraju si s Nette\Cache a zjištuji, že mi funguje jen tak nějak
napůl.
Funguje mi vytváření a mazání přes tagy, ale přes key (čili název tagu)
se to nikdy nesmaže, proč?
Šablona presenteru
<?php
{cache 'kes', expire => '10 minutes', tags => ['time', 'timecache']}
{=time()}
{/cache}
<br>
<a n:href="uncache! time">Smazání keše - 1 tag</a> <br>
<a n:href="uncache! timecache">Smazání keše - 2 tag</a>
?>
Presenter
<?php
private $cache;
public function __construct(Nette\Caching\IStorage $storage)
{
$this->cache = new Cache($storage);
}
?>
funkční handle pouze přes tagy
<?php
public function handleUncache($tag)
{
$this->cache->clean(array(
Cache::TAGS => array($tag),
));
}
?>
nefunkční přes klíč, proč?
<?php
public function handleUncache($tag)
{
// $this->cache->clean(array(
// Cache::TAGS => array($tag),
// ));
$this->cache->remove('kes');
}
?>
- David Matějka
- Moderator | 6445
ahoj, cache v sablone ma
namespace Nette.Templating.Cache
. A mazani/cteni pres klic je
zavisle prave na namespace (narozdil od mazani pres tagy). kdyz tedy vytvaris tu
cache, tak musis predat spravny NS
- Klobás
- Člen | 113
David Matějka napsal(a):
ahoj, cache v sablone ma namespace
Nette.Templating.Cache
. A mazani/cteni pres klic je zavisle prave na namespace (narozdil od mazani pres tagy). kdyz tedy vytvaris tu cache, tak musis predat spravny NS
a ten NS je tedy co konkrétně v mém Presenteru? NS Presenteru nebo co? Prosím o ukázku.
- Ondřej Kubíček
- Člen | 494
jak psal david, musíš při vytváření cache předat ten NS
public function __construct(Nette\Caching\IStorage $storage)
{
$this->cache = new Cache($storage, "Nette.Templating.Cache");
}
- Klobás
- Člen | 113
Ondřej Kubíček napsal(a):
jak psal david, musíš při vytváření cache předat ten NS
public function __construct(Nette\Caching\IStorage $storage) { $this->cache = new Cache($storage, "Nette.Templating.Cache"); }
Udělal jsem (poprvé jsem si přidal vlastní NS něco jako
„testovaciNS“, poté tento váš, a stejně mi to neodkešuje :(
Nette 2.3 (po každé změně, jsem pro jistotu promazal celý obsah temp/); ale
stejně se nic nezměnilo, funguguje to pořád blbě.
V čem může být zakopaný pes?
Editoval Klobás (9. 3. 2018 15:07)
- David Matějka
- Moderator | 6445
hm, tak kdyz na to koukam poradne, tak ten klic se vytvari trochu sloziteji .. takze bude lepsi to mazat pres tag
- Klobás
- Člen | 113
David Matějka napsal(a):
hm, tak kdyz na to koukam poradne, tak ten klic se vytvari trochu sloziteji .. takze bude lepsi to mazat pres tag
Hmm, https://doc.nette.org/cs/caching#…
<?php
Položku z cache vymažeme uložením NULL, nebo metodou remove():
$cache->save($key, NULL);
// nebo
$cache->remove($key);
?>
Tak v tom případě, je tohle zavádějící nebo neotestované nebo nevím, jako OK, můžu si vždy uložit tag pod stejným názvem jako klíč, ale …
Navíc pod tím, je ukázka, že si mohu NS pojmenovat jak chci.
Jsem z toho volako volako zmetený.
Editoval Klobás (9. 3. 2018 15:33)
- Klobás
- Člen | 113
Hm, pokud si to zakešuji v presenteru rovnou, tak mazání přes klíč
funguje korektně.
A nastavil jsem si i jiný NS a správně to vytvořilo složku v tempu
_Test123
Takže, je nějaký problém když se kešuje přes makro {cache}
<?php
$this->cache = new Cache($storage, 'Test123');
?>
<?php
$this->template->kes2 = $this->cache->load('kes2');
if ($this->template->kes2 === NULL)
{
$this->cache->save('kes2', $this->template->kes2 = date('H:i:s'));
}
?>
- Klobás
- Člen | 113
Felix napsal(a):
Vytvareni cache v sablone trochu slozitejsi, to se snazil @matej21 popsat. Jednoduche mazani pres name tedy nefunguje.
V dokumentaci je to popsane obecne pro pouziti Cache, ale ne pro cache v sablone. To bychom mohli doplnit.
Prosím o to, protože na základě tohohle cvičení a stejných postupů s tím rozdílem, že jednou v šabloně, podruhé z presenteru, jsem pomalu nabyl dojmu, že se jedná o BUG.
Děkuji.
- Klobás
- Člen | 113
David Grudl napsal(a):
Možná by mohlo fungovat
$this->cache->remove(['kes']);
Mohlo, ale bohužel. Nějak chápu, proč to asi nefunguje, ale dopíšete to prosím do dokumentace?
Ještě se zeptám, existuje nějaký github nebo live-list kde můžu sledovat co se kde v dokumentaci změní za text, abych byl neustále v obraze? (Nezajímá mě kód nebo PR do Nette, ale skutečně jen obsahová část dokumentace). (Celý web včetně všech sekcí Nette 2.1 – 2.4).