práce nad formulářem, ruční validace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tany
Člen | 31
+
0
-

Ahoj, existuje nějaký způsob ruční validace formu ? Stavím ajax site, a chtěl by jsem hlavně mít možnost kontroly nad chybama ve formuláři.

Klasický způsob, co jsem našel v dokumentaci, je vyvtoření komponenty v továrničce a onclick callback u submitu. Tento způsob mi nepřijde pro ajax moc vhodný, protože při chybě validace na straně serveru se vrací opět vyrendrovaný form. (JS validace funguje, ale při její chybě, nebo podstrčení postu není nic platná).

Takže nějak hledám možnost ala:

if ($this->isAjax()) {
  if($form->isValid($postData)) {
   ...
  } else {
    foreach($form->getErrors() as $error) {
      $output[] = array('idprvku' => $error)
    }
    .. json responce
  }
}

Je něco takového možné ?

bojovyletoun
Člen | 667
+
0
-

něco takovéhleho v nette není. Není problém formulář obalit do snippetu. Ale něco podobného se zde řešilo –přečíst celé i s odkazy

pave.kucera
Člen | 122
+
0
-

Napadá mě jedno řešení, ale nevím, jeslti není nějaké lepší, a nad čistotou jsem si moc nelámal hlavu :).

<?php

protected function createComponentMyForm()
{
	// $form instanceof \Nette\Application\UI\Form
	$form->onError[] = function($form) {
		$presenter = $form->getPresenter(TRUE);
		if ($presenter->isAjax()) {
			$presenter->sendResponse(new \Nette\Application\Respones\JsonResponse($form->getErrors())); // možná by šel využít i $presenter->payload
		}
	};
}
?>

Psáno z hlavy, neozkoušeno, ale princip tam snad naznačený je.