Ověření nerovnosti dvou SelectBoxu

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

Potreboval bych nejak overit zda jsou ve formulari vyplneny 2 selectboxy a zaroven aby se vybrane hodnoty selectboxu NEROVNALY

$from = array(
	'cs' => 'cs',
	'en' => 'en',
	'de' => 'de',
);
$to = $from;

$form->addSelect('from', 'From', $from)
	->addRule(Form::FILLED, 'From must be filled')
	->skipFirst();
$form->addSelect('to', 'To', $to)
	->addRule(Form::FILLED, 'To must be filled')
	->skipFirst();

Nenapada nekoho jak toho dosahnout?

Nejdriv jsem chtel zkusit aspon zda se rovnaji, ale kod

$form['to']->addConditionOn($form['from'], Form::VALID)
	->addRule(Form::EQUAL, 'Chybova hlaska', $form['from']);

zpusobi FatalErrorException s tim ze nemuze konvertovat tridu SelectBox na string
Pri overovani pravidla Form::EQUAL u select boxu se bere jako argument pouze string

Napada nekoho jak to overit jinak pomoci standartnich validacnich pravidel, nebo si budu muset napsat vlastni validaci? Nebo vidite nejake jine vhodne reseni($to i $from mohou byt dost velke 50 i vice polozek a nemusi se vzdy rovnat).

Editoval TomasTB (15. 1. 2009 11:01)

_Martin_
Generous Backer | 679
+
0
-

Chyba vzniká při generování validačních pravidel pro JavaScript, navrhuji Davidovi upravit soubor InstantClientScript.php na řádku 255 podle řádku 312 následovně:

// původní:
$tmp3[] = "element.options[i].value==" . json_encode((string) $item);

// nový:
if (is_object($item)) { // compare with another form control?
	$tmp3[] = get_class($item) === $control->getClass()
		? "element.options[i].value==document.getElementById('" . $item->getHtmlId() . "').value" // missing trim
		: 'false';
} else {
	$tmp3[] = "element.options[i].value==" . json_encode((string) $item);
}
TomasTB
Člen | 13
+
0
-

_Martin_ napsal(a): …

Taky uz jsem na to prisel(jak zdroj chyby tak reseni), akorat si nikdy nejsem jist jestli je to bug featura, nebo moje chyba …

David Grudl
Nette Core | 8218
+
0
-

Už by to mělo fungovat.

Podmínku lze zapsat:

$form['to']->addRule(~Form::EQUAL, 'Chybova hlaska', $form['from']);