Validace formuláře – chybné zpracování
- dufin
- Člen | 8
Dobrý den mám formulář v presenteru ale nefunfuje mi u něj validace:
$form = new Form($this, 'objednavkaForm');
$form->addText('jmeno', 'Jméno*')
->setType('text')
->addRule(Form::FILLED, 'Položka jméno je povinná.');
$form->addText('prijmeni', 'Příjmení*')
->setType('text')
->addRule(Form::FILLED, 'Položka příjmení je povinná.');
$form->addText('email', 'Email*')
->setType('text')
->addRule(Form::EMAIL, 'Email není zadán správně.');
$form->addText('telefon', 'Telefon*')
->setType('text')
->addRule(Form::PATTERN, 'Telefon není zadán správně!.', '/^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$/');
$form->addCheckbox('agree')
->addRule(Form::EQUAL, 'Je potřeba souhlasit s podmínkami', TRUE);
$form->addSubmit('submit', 'Odeslat');
return $form;
Jediné co funguje je validace u jména a příjmením, ale vypíše se mi pouze varování „Vyplňte toto pole!“ a ne „Položka jméno je povinná“.
- David Matějka
- Moderator | 6445
To se totiz provede HTML5 validace v prohlizeci, jejiz UI a hlasky (asi) nemuzes ovlivnit. muzes ji maximalne uplne vypnout pomoci
$form->getElementPrototype()->novalidate("novalidate")
- Oli
- Člen | 1215
Jaké instance je Form? Je to Nette\Application\UI\Form
? Potom
by jsi tam měl mít něco jako
$form->onSuccess[] = array($this, 'metodaKteraZpracujeOdeslani');
Není jasné jestli to tam máš. A setType(‚text‘) je podle mě zbytečné. To je automaticky, nebo ne?
K tvému problému jediné co mě napadá, že by to mohlo způsobovat, že
Form není Nette\Application\UI\Form
, ale jiná třída…
- dufin
- Člen | 8
Díky moc
setType(‚email‘) pomohlo ;-), ale nevyřešilo to problém s checkBoxem :D
Takže jsem použil řešení od Mysteria s droubnou úpravou, protože to krachlo s chybou: Using $this when not in object context
Takhle to jede parádně:
$_this = $this;
$form->onError[] = function(Form $form) use ($_this) {
foreach ($form->errors as $error) {
$_this->flashMessage($error, 'error');
}
};
Děkuji moc za rady.