validace formuláře na vyplnění jen jednoho prvku

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

Ahojda,
potřeboval bych akutně pomoct s validací formuláře, mám v něm několik RadioListů a validátor by měl reagovat jen v případě kdy není vyplněn (odkliknut) žádný ze seznamů.

Díky

Luboš

Majkl578
Moderator | 1364
+
0
-

Podmínečná validace pomocí addCondition a/nebo addConditionOn. Více tu.

lubos
Člen | 22
+
0
-

Jasně, ale proč mi laděnka potom hlásí:
Call to undefined method Rules::setOption().

Příklad:

<?php
$form->addRadioList('skupina1', '', $this->frmitems['skupina1'])
     ->addConditionOn($form['skupina2'], ~Form::FILLED, true)
     ->addRule(array($this, 'finaleFrm_validate'), 'Vyberte alespoň jednoho zástupce.')
     ->setOption('class', 'pozadi_skupina1');

$form->addRadioList('skupina2', '', $this->frmitems['skupina2'])
     ->addConditionOn($form['skupina1'], ~Form::FILLED, true)
     ->addRule(array($this, 'finaleFrm_validate'), 'Vyberte alespoň jednoho zástupce.')
     ->setOption('class', 'pozadi_skupina2');
?>
Ondřej Mirtes
Člen | 1536
+
0
-

Protože to je fluent interface a když dáš šipku za addRule, tak už nejseš na formulářovém prvku, ale na jeho pravidlech.

Musíš si ho znova vytáhnout na řádku pod tím:

$form['skupina1']->getControlPrototype()->class('pozadi_skupina1');

Myslím, že ta tvoje varianta se setOption() by dělala něco jiného.

lubos
Člen | 22
+
0
-

Aha, takže stačí změnit vlastně jenom pořadí :D

<?php
$form->addRadioList('skupina2', '', $this->frmitems['skupina2'])
     ->setOption('class', 'pozadi_skupina2')
     ->addConditionOn($form['skupina1'], ~Form::FILLED, true)
     ->addRule(array($this, 'finaleFrm_validate'), 'Vyberte alespoň jednoho zástupce.');
?>

Díky za rady