Hodnota vyplněna a tudíž hodnota v jiné položky v rozsahu
- smi
- Člen | 75
Mám formulář a v něm položky – lámu si hlavu jak zapsat podmínku:
Je-li položka **A** vyplněna (co lze snadno),
pak musí být položka **B** v rozdahu 1 - 100 (nebo větší než 1 - to je jedno)
Chtěl bych to pomocí validačních pravidel.
Jinak to samozřejmě umím ve validační funkci pověšené na onValidate[].
Znáte někdo elegantní řešení ?
Díky
- voda
- Člen | 561
Najdeš to v dokumentaci. Je to příklad:
$form->addCheckbox('newsletters', 'zasílejte mi newslettery');
$form->addText('email', 'E-mail:')
// pokud je checkbox zaškrtnut
->addConditionOn($form['newsletters'], Form::EQUAL, TRUE)
// pak vyžaduj e-mail
->addRule(Form::FILLED, 'Zadejte e-mailovou adresu');
- smi
- Člen | 75
Tohle samozřejmě vím. Jenže já potřebuji něco ve stylu:
$this->addText('JineLegenda', 'x) jiné (legenda)', 40, 80)
->addRule($this['JinePocet'], 'Položka %label není v rozsahu 1 až n.', array(1, NULL));
$this->addText('JinePocet', 'x) jiné (počet)', 5, 5)
->addCondition(parent::FILLED)
->addRule(parent::RANGE, 'Položka %label není kladné celé číslo.', array(0, NULL))
->addCondition($this['JineLegenda'], parent::FILLED)
->addRule(parent::RANGE, 'Položka %label není v rozsahu 1 až n.', array(1, NULL));
Jenže tohle se musí vytáhnou až za konec – jinak „Component with
name ‚JinePocet‘ does not exist.“
A připadá mi to příliš krkolomné.
Nějaké smysluplné návrhy ?
- Jan Endel
- Člen | 1016
smi napsal(a):
Je-li položka **A** vyplněna (co lze snadno), pak musí být položka **B** v rozdahu 1 - 100 (nebo větší než 1 - to je jedno)
Form:
$this->addText('a', 'Položka A');
$this->addText('b', 'Položka B')
->addConditionOn($this['a'], Form::FILLED)
->addRule(Form::RANGE, "položka musí být větší než %d.", array(0, NULL));
Podle tvého popisu by to validační pravidlo vypadalo nějak takhle, zkus to kdyžtak trošku lépe popsat, páč jsem z tvého popisu dost zmaten.
- smi
- Člen | 75
pilec napsal(a):
smi napsal(a):
Je-li položka **A** vyplněna (co lze snadno), pak musí být položka **B** v rozdahu 1 - 100 (nebo větší než 1 - to je jedno)
Form:
$this->addText('a', 'Položka A'); $this->addText('b', 'Položka B') ->addConditionOn($this['a'], Form::FILLED) ->addRule(Form::RANGE, "položka musí být větší než %d.", array(0, NULL));
Podle tvého popisu by to validační pravidlo vypadalo nějak takhle, zkus to kdyžtak trošku lépe popsat, páč jsem z tvého popisu dost zmaten.
Jo, takhle nějak jsem to myslel – inspiroval jsi mě, takže to ted vypadá takhle (kdyby to někdo někdy užil :o) ):
$this->addText('JineLegenda', 'x) jiné (legenda)', 40, 80);
$this->addText('JinePocet', 'x) jiné (počet)', 5, 5)
->addCondition(parent::FILLED)
->addRule(parent::RANGE, 'Položka "%label" není číslo.', array(0, NULL))
->endCondition()
->addConditionOn($this['JineLegenda'], parent::FILLED)
->addRule(parent::RANGE, 'Položka "%label" není číslo větší než 1.', array(1, NULL))
->elseCondition()
->addRule(parent::RANGE, 'Není-li legenda, musí být "%label" nulová.', array(0, 0))
// ->addRule(~parent::EQUAL, 'Není-li legenda, musí být "%label" nulová.', 0)
->endCondition();
Jen nechápu, proč mi to nechodí s ~parent::EQUAL .