Da sa metoda onSuccess pri formularoch obist na strane servera?

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

Zdravím, mali sme takú debatu s kolegom, či je treba v submitted metóde skontrolovať validitu formulára pomocou metódy

$form->isValid()

Ja myslím, že nie, pretože o to sa predsa stará callback onSuccess, takže keď to ním prejde, formulár musí byť valídny. Podľa zdrojáku z Form.php

if (isset($valid) || $this->isValid()) {
			$this->onSuccess($this);
		} else {
			$this->onError($this);
			if ($this->onInvalidSubmit) {
				trigger_error(__CLASS__ . '->onInvalidSubmit is deprecated; use onError instead.', E_USER_WARNING);
				$this->onInvalidSubmit($this);
			}
		}

to tak je, ale predsa len by som to potreboval potvrdiť od nejakého Nette guru.

castamir
Člen | 629
+
0
-

metody v onSuccess[] se provedou jen pokud je formulář validní nebo je odeslán přes tlačítko (submit button), které má nastavenou vlastnost setValidationScope(FALSE).

Editoval castamir (28. 3. 2013 19:41)

sabrx
Člen | 47
+
0
-

Inak povedane, ked nastavim formularu prislusne validacne pravidla, nedaju sa pri pouziti onSuccess[] v ziadnom pripade obist (serverovo), je to tak?

Filip Procházka
Moderator | 4668
+
0
-

Přesně tak, když nebudeme počítat varianty, kdy někdo násilně vyhodí ten callback z formuláře (jiný programátor). Od uživatele to nijak obejít nejde.

sabrx
Člen | 47
+
0
-

Vdaka, to som potreboval pocut.

Majkl578
Moderator | 1364
+
0
-

Jen pozor na situaci, kdy bys na formulář navěsil více success calbacků. Řekněme dva, v prvním formuláři přidáš chybu, druhý se ale i tak spustí, protože validita se kontroluje před spuštěním eventu jako takového, ne už mezi jednotlivými kroky.

David Matějka
Moderator | 6445
+
0
-

@Majkl578: na to se mi osvedcilo tohle

class Form extends \Nette\Application\UI\Form
{
	public function onSuccess(Form $form)
	{
		try {
			parent::onSuccess($form);
		} catch (AbortExecutionException $e) {

		}
	}

	public function abort()
	{
		return new AbortExectionException;
	}
}

class AbortExecutionException extends \Exception { }

kdyz se neco spatneho stane, zavolam akorat $form->abort() a dalsi callback se neprovede :)