Makro Cache předávání instance Cache třídy

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

V současné implementaci makra cache je natvrdo nadefinováno, aby se při jeho použití používala třída
\Nette\Caching\Cache. Nešlo by udělat, aby se tam instance Cache třídy dostávala podobně jako je tomu u storage objektu??

Důvod, proč by se mi to líbilo je ten, že mi máme například udělaný panel pro debugbar, ve kterém se vypisuje co vše se při requestu dělo s cache. Tedy něco jako následující výpis:

Loaded:

Key Meta
news-coments-123 Created: 12.3.2012 20:01:50
  Expire: 12.3.2012 22:01:50
news-123 Created: 10.3.2012 20:01:50
  Expire: 10.4.2012 22:01:50

Saved:

Key Meta
news-rating-123 Created: 12.3.2012 23:01:50
  Expire: 18.3.2012 22:01:50

Problém je ten, že aby jsme tohoto dosáhli, tak máme upravenu třídu pro storage a cache. Upravený storage se do makra dostane automaticky a to díky configu, kde jednoduše nadefinujeme cacheStorage: DevFileStorage. Cache třída tam ale bohužel takto dostat nejde a proto musíme přepisovat i třídu CacheMacro, což se nám moc nelíbí.

Kdyby se tam tedy dokázala třída pro cache dostávat stejně, jako je to u storage, tak by jsme byli opravdu rádi.

Editoval Etch (4. 3. 2012 12:58)

Etch
Člen | 403
+
0
-

Tak nakonec vyřešeno tím, že jsme veškeré „logování“ cache přesunuli přímo do Storage třídy. Tím pádem nás ta změna v makru cache teď až tolik netrápí, ale přišlo by nám vtipnější, aby se to makro pokusilo vytáhnout používanou Cache třídu ze systém conteineru a až poté, co by jí tam nenašlo, by použilo defaultní \Nette\Caching\Cache. Když už se tam stejně přes $netteCacheStorage tahá storage, tak proč tam nedat přes $netteCache i cache třídu.

Tomáš Votruba
Moderator | 1114
+
0
-

Debug bar pro cache (session) by byl jistě zajímavý.

Etch
Člen | 403
+
0
-

Až tu bude aspoň v nějakém stádiu „beta verze“, tak to samozřejmě uvolníme. Zatím je to jen dva dny stará myšlenka, kterou jsme tak nějak narychlo napsali, protože už nás opravdu štvalo, že nemáme nikde žádný rychlý přehled, co se natáhlo z cache a co nikoliv.

EDIT:

Ještě rozvedu problém, který to má teď, pokud to řešíme až na Storage a proč to díky tomu vlastně není až tak užitečné jak by mohlo být.

Pokud to má být přehledné, tak je nutné částečně upravit třídu \Nette\Caching\Cache. To sice není problém, ale díky tomu, že se pak v {cache} vytváří stejně na tvrdo instance \Nette\Caching\Cache, tak se nejde vyhnout zásahu přímo do nette. Buď se musí zasáhnout přímo do třídy \Nette\Caching\Cache, a nebo jí podědím a přepíšu, ale v tom případě zas budu muset zasáhnout do třídy CacheMacro. Ve výsledku je to z bláta do louže. (Pravděpodobně by šlo asi ještě makro {cache} vyměnit někde v templatePrepareFilters(), ale to jsem popravdě nezkoušel.)

Upravovat (nebo vyměnit) \Nette\Caching\Cache je nutné hlavně z důvodu, že se tam dá naposledy získat klíč cache v plain podobě. Do storage už se dostane jen key, který je prohnaný přes md5:

$key = $this->namespace . md5(is_scalar($key) ? $key : serialize($key));

A přeci jen vidět pak, že se natáhla cache s klíčem:

_00d37ff485d834247g7e618ced1d6463
atd.

není zrovna user friendly. Toť celý problém.

Editoval Etch (5. 3. 2012 4:55)