Mozne zle vyhodnocovanie Form::EQUAL
- westrem
- Člen | 398
Ahoj,
sam som napochybach ci nasledovne spravanie brat ako strict feature alebo
ako bug.
Majme nasledovny formularovy prvok:
$form->addText('float', 'Float')
->addRule(Form::EQUAL, 'Must be equal to 100.00', 100.00);
Ked do policka zadame hodnotu ‚100.00‘ tak JS validator prejde ale serverovsky nie. Preco? Sposobuje to konverzia kontrolovanych dat na string vo validatore
V pravidle sme totiz posunuli cisty float, ktory sa pri zmene na string v tomto pripade zmeni na ‚100‘ a nie na ‚100.00‘.
Edit: Tento jav nastava ako som skusal nastava iba ked ma dany float na konci nuly, konverzia 100.87 na string vrati ‚100.87‘ co je v poriadku.
Ano je to dost okrajovy pripad ale myslim si, ze by bolo vhodne ho vyriesit, co vy na to?
Editoval westrem (3. 9. 2010 16:55)
- westrem
- Člen | 398
paranoiq napsal(a):
znám na to možná překvapivý, ale spolehlivě fungující work-arround:
$form->addText('float', 'Float') ->addRule(Form::EQUAL, 'Must be equal to 100.00', 100);
:) Tak ako to je jasne, vravim, ze je to okrajovy pripad. Islo mi skor o nasledovne veci
- namiesto natvrdo napisaneho parametru typu float 100.00 tam mozes niekedy mat premennu typu float obsahujucu tu hodnotu. Pritom podla mna (ked sa na to pozriem uzivatelskym ockom) je 100.00 a ‚100.00‘ naprosto rovnaka hodnota
- JS validacia presla, serverovska nie. Podla mna by JS validacia mala odpovedat tej serverovskej (chapem vsak, ze niekedy to nie je mozne vzhladom na moznu limitaciu JS)
- neviem posudit nakolko je uplne spolahlive pri EQUAL oba parametre pretypovavat nutne na string a potom porovnavat, nemozu nastat problemy aj pri inych typoch konverzie?