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
+
0
-

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
+
0
-

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;
	}
}
PetrHH
Člen | 49
+
0
-

Super, díky moc!