MD5 v Nette\Caching\Cache.php

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dada-amater
Bronze Partner | 52
+
0
-

Ahoj,

mel bych navrh na upravu Cache.php. Prepisuju aplikaci, ktera pouziva memcache. Bohuzel klice se vzdy prevedou na md5(), cili neni moznost ulozit do pameti neco pod klicem ABC. Normalne to nevadi, pokud aplikace nema vice casti a nemusi spolupracovat s jinymi systemy, ktere si predavaji pres hodnoty v memcache parametry, pripadne chteji hodnotu z pameti vymazat (aby se mohla aktualizovat). Navrhuji, aby slo md5 vypnout:

<?php
class Cache extends Nette\Object implements \ArrayAccess
{
	private $md5_enabled=TRUE;
...
	public function setUseMd5($md5_enabled)
	{
	    $this->md5_enabled = $md5_enabled;
	}

	protected function generateKey($key)
	{
		if($this->md5_enabled){
			return $this->namespace . md5(is_scalar($key) ? $key : serialize($key));
		}
		else{
			return $this->namespace . (is_scalar($key) || is_string($key) ? $key : md5(serialize($key)));
		}
	}
...
}
?>

Nebo alespon udelat rozhrani ICache, aby to to dalo prepsat :-)

Editoval dada-amater (29. 6. 2012 9:50)

Filip Procházka
Moderator | 4668
+
0
-

Nelíbí. Vymysli svoji aplikaci lépe.

Ondřej Mirtes
Člen | 1536
+
0
-

Můžeš si podědit Cache a přepsat chování generateKey?

Tomas Jancik
Člen | 103
+
0
-

nebo muzes jako klice v ostanich aplikacich taky pouzit md5 hash tvyhch klicu :)

ale to predavani parametru pres cache se mi moc nezda!!! spis bych se zamyslel nad jinym resenim

dada-amater
Bronze Partner | 52
+
0
-

HosipLan – ok.
Ondřej Mirtes – pokud to podedim, uz to nemuzu predavat tam, kde se ceka Nette\Caching\Cache. Navic ma Cache.php nejake private metody, takze proste podedeni ani nefunguje.
Tomas Jancik – prepisovat soucasne aplikace kvuli aplikaci nove je ztrata casu. Predavani pres cache nemusi byt nerozumne. Priklad: kdyz je cache namapovana na nosql naplnenou daty, tezko si vyzobnu klic ABC kdyz se to naplni pres md5.

Nette je vyborne k vytvareni projektu na zelene louce, ale pokud se existujici aplikace prepisuje do nette, podobne veci to dost zneprijemnuji. Zvlast, kdyz ne vse je v php a do nette jde (nebo je vhodne) prepsat.

Je mi skoro fuk, jestli se to do Nette dostane nebo ne, ja si to vyresil. Jen je skoda, ze takovou zakladni vec framework neumi. Duvod, ze to nekdo nepouziva a tak to neni potreba, je smesny.

Milo
Nette Core | 1283
+
0
-

Proč bys nemohl předávat poděděnou MyCache tam kde je očekávána Cache? To je přeci jedna z výhod dědění. Přepíšeš si jen metodu generateKey() a hotovo.

Patrik Votoček
Člen | 2221
+
0
-

dada-amater napsal(a):

Ondřej Mirtes – pokud to podedim, uz to nemuzu predavat tam, kde se ceka Nette\Caching\Cache. Navic ma Cache.php nejake private metody, takze proste podedeni ani nefunguje.

Tohle jsem nepobral… Přece:

class Foo {}
class Bar extends Foo {}

$obj = new Bar;
dump($obj instanceof Foo); // true

Zmiňovaná metoda je protected a není final takže ti nic nebrání.

Tomas Jancik – … Predavani pres cache nemusi byt nerozumne.

To rozhodně nerozumné je už z podstaty věci. Tím nevrdím že je nerozumné pro komunikaci aplikací používat memcache. To si klidně dělej ale nepoužívej k tomu Nette\Caching\Cache která k tomu není určena.

Jen je skoda, ze takovou zakladni vec framework neumi.

Vzhledem k tomu že klíč může být i objekt je implementace převádějící klíč na MD5 hash rozumná volba. Nevidím jediný důvod proč by tomu mělo být jinak.

dada-amater
Bronze Partner | 52
+
0
-

Mate pravdu, s tou blbosti ohledne dedeni se mi nejak zatemnilo. V nette 2.0.0 prvni final jeste generateKey() nebylo a musel bych prekryt pulky tridy. Tim bych tema asi uzavrel. Diky za reakce.