Vícestupňová validace formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- PetrHH
- Člen | 49
Dobrý den,
mám formulář, kde může uživatel nahrát nějaký textový soubor. Já
mu jej po nahrání zkontroluji a vypíšu případné chyby + souhrn, co jsem
se souboru získal. Toto následně potřebuji odsouhlasit a teprve provést
finální akci. Nevíte, prosím, jak na to? Googla jsem trápil, ale asi jsem
nepokládal správné dotazy.
Díky za váš čas.
Petr
- llook
- Člen | 407
Spíš než vícestupňovou validaci hledej vícekrokový formulář nebo průvodce. Dá se to udělat různými způsoby, třeba nějak takhle:
<p n:if="$dataToReview">
Data ke schválení: {$dataToReview}
</p>
{control $step}
class WizardPresenter extends Presenter
{
private $step = 'step1';
private $dataToReview;
protected function renderDefault()
{
$this->template->step = $this->step;
$this->template->dataToReview = $this->dataToReview;
}
protected function createComponentStep1()
{
$form = new Form;
$form->addUpload('soubor');
$form->addSubmit('save');
$form->onSuccess[] = callback($this, 'processStep1');
return $form;
}
public function processStep1(Form $step1)
{
$values = $step1->values;
// ... nějaké zpracování toho souboru
$this->dataToReview = ... data ke schválení
$this['step2']->setDefaultValues(array(
// vložení dat ke schválení do formuláře
));
$this->step = 'step2';
}
protected function createComponentStep2()
{
$form = new Form;
$form->addHidden('reviewedData'); // hidden, ve kterém jsou data ke schválení
$form->addSubmit('save');
$form->onSuccess[] = function (Form $step2) {
// Zpracování druhého kroku
// Bacha na to, že uživatel může pozměnit hodnotu z toho hidden prvku,
// takže jestli má podléhat nějaké kontrole, tak musí probíhat i v druhém
// kroku.
$this->redirect('...');
};
return $form;
}
}