Validace jen odeslaných elementů
- iguana007
- Člen | 970
Pokud by si měl každý form přirazený k jiné akci/renderu, tak by to mohlo být poměrně simple … místo toho, aby si je ručně „nevypsal“ v ručním renderu formuláře, tak by si prvky toho formuláře mohl unsetnout před předáním do šablony, tj. nějak takto:
protected function createComponentTestForm() {
$form = new Nette\Application\UI\Form;
$form->addText('aaa', 'aaa')->setRequired();
$form->addText('bbb', 'bbb')->setRequired();
$form->addText('ccc', 'ccc')->setRequired();
$form->addText('ddd', 'ddd')->setRequired();
$form->addSubmit('save', 'Save');
$form->onSuccess[] = array($this, 'testFormSubmitted');
return $form;
}
public function testFormSubmitted(UI\Form $form) {
$values = $form->getValues();
$this->redirect('this');
}
public function renderDefault()
{
$form = $this->getComponent('testForm');
unset($form['bbb']);
}
- Pavel Macháň
- Člen | 282
akadlec napsal(a):
Jde nějak donutit form validaci aby se validovaly jen odeslaná políčka? Udělám si form o 5ti inputech, všechny povinné, vykreslím jen 4 a form nedokáži úspěšně zpracovat protože skončí na nevyplněném poli.
Co takhle vytvořit továrničku která bude předávat třeba parametr $type a podle toho si složíš formulář na přesnej počet položek
class TestFactory {
const
ONE = 0,
TWO = 1,
THREE = 2;
/**
* @var int $type
* @return \Nette\Application\UI\Form
*/
public function create($type) {
$form = new Form;
$form->addText('aaa', 'aaa')->setRequired();
$form->addText('bbb', 'bbb')->setRequired();
$form->addText('ccc', 'ccc')->setRequired();
if($type == self::TWO) {
$form->addText('ddd', 'ddd')->setRequired();
} else ...
return $form;
}
}
class MyPresenter extends Presenter {
/** @var \TestFactory @inject */
public $testFactory;
/** @return Form */
public function createComponentCampaignPreview() {
return $this->testFactory->create(TestFactory::TWO);
}
}
Editoval EIFEL (27. 5. 2014 10:44)
- Pavel Macháň
- Člen | 282
akadlec napsal(a):
jenže co když bych ty hodnoty chtěl mít i v getValues ? Jen tedy ve výchozích hodnotách.
Tak to udelej přez addCondition kde nastaviš že pokud neni prazdnej tak se bude validovat.
Editoval EIFEL (27. 5. 2014 11:02)