MD5 v Nette\Caching\Cache.php
- dada-amater
- Bronze Partner | 52
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)
- Tomas Jancik
- Člen | 103
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
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.
- Patrik Votoček
- Člen | 2221
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
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.