Mozne zle vyhodnocovanie Form::EQUAL

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

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)

paranoiq
Člen | 392
+
0
-

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);
westrem
Člen | 398
+
0
-

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?