Validace: porovnání hodnot inputů

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

Dobrý den, lze nějakým jednoduchým způsobem validovat dva inputy na základě porovnání jejich hodnot?

Zkoušel jsem:

$form->addText('min', 'Min')
	     ->addRule(Form::NUMERIC);

$form->addText('max', 'Max')
	     ->addRule(Form::NUMERIC)
	     ->addRule(Form::RANGE, 'Max musí být větší než %d!', array($this["min"]->value, NULL));

ovšem zastaví mě javascriptová validace (kterou nechci vypnout) protože v době vytváření formuláře se do atributu inputu do data-nette-rules vloží napevno momentální(v době vytváření) hodnota inputu min jako mezní spodní kontrola rozsahu. Bez defaultní hodnoty tedy prázdný string – pak je jakákoli hodnota testována na daný rozsah jako FALSE.

Řešit to lze ajaxovým znovunačtením formuláře, ovšem na to nechci spoléhat. Vypnutí JS validace by také pomohlo, ale to také nechci. A vypnutí JS validace jen pro konkrétní inputy předpokládám nelze. Taktéž by to asi šlo řešit vlastním callbackem, který pak porovná obě ty hodnoty pro konkrétní inputy, ale to mi nepřijde moc čisté řešení, obzvlášť když v callback funkci získám jen objekt daného inputu a kontrolu dalšího bych musel dělat stylem $input->getParent()->getComponent('druhyInput').

Jako řešení bych viděl změnu v Nette: možnost dynamických validačních hodnot na základě jiných inputů (ukládání do data-nette-rules). Ovšem nakoukal jsem jak složité by to bylo.

A nebo přemýšlím špatným směrem a lze to řešit jinak?

redhead
Člen | 1313
+
0
-

Myslím, že stačí odstranit to ->value

Casper
Člen | 253
+
0
-

redhead napsal(a):
Myslím, že stačí odstranit to ->value

Bohužel nestačí, dostávám:

Notice: Object of class Nette\Forms\Controls\TextInput could not be converted to int in /home/path/to/web/libs/Nette/Forms/Rules.php on line 263

Do data-nette-rules se sice místo prázdného stringu vloží arg:[{control:'min'},null], ale s tím si stejně js validator range neporadí.

Nějaké další návrhy?

Editoval Casper (23. 10. 2011 12:28)