Ověření nerovnosti dvou SelectBoxu
- TomasTB
- Člen | 13
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
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);
}
- David Grudl
- Nette Core | 8218
Už by to mělo fungovat.
Podmínku lze zapsat:
$form['to']->addRule(~Form::EQUAL, 'Chybova hlaska', $form['from']);