jaký submit byl stisknut?

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

Zdravím,
nejsem schopen najít v dokumentaci: Mám formulář s vícero submity a při obsluze potřebuji zjistit, který byl stisknut. V Nette 2.1 jsem používal $form->submitted->name ale u Nette 2.4 to nejede.
Děkuji za radu.

CZechBoY
Člen | 3608
+
+3
-

Případně plná cesta k tvýmu zápisu bez magie

$form->isSubmitted()->getName();

https://api.nette.org/…orm.php.html#…

Editoval CZechBoY (26. 9. 2016 16:03)

jik
Člen | 149
+
0
-

Velmi děkuji. A jakožto až na tuto práci s Nette neobjektový programátor mám dotaz: Zatím nevím, jak se vlastně takovouto nějakou věc dovědět přímo z dokumentace. Jak vlastně něco takového zjistit? Co vlastně obnáší ona magie?

Pavel Kravčík
Člen | 1196
+
+1
-

Dá se to zjistit i „selským rozumem“. Například takto:

	public function successForm($form, $values)
	{
		dump($form); die;
	}

Zjistím, co mi to vlastně vrací. Je to \Nette\Application\UI\Form a tuhle třídu už snadno najdu v API. A tam vidíš všechny funkce, které má. A začneš se pídit po něčem, co by mohlo souviset s odesláním (jak si zmínil v 2.1 – submitted) a došel bys k tomu, co radil @CZechBoY.

Důležité je pochopit namespace, pak už je to relativně hračka s dumpem. :)

jik
Člen | 149
+
0
-

Jestli jsem to správně pochopil, tak $form->isSubmited() vrací Nette\Forms\ISubmitterControl, to je implementováno jako Nette\Forms\ISubmitterControl, které dědí metodu getName(), s jejíž pomocí zjistím jméno toho čudlíku.

CZechBoY
Člen | 3608
+
0
-

No přímo ISubmitterControl nedědí od BaseControl, ale SubmitButton dědí od BaseControl, který už má metodu getName().

h4kuna
Backer | 740
+
0
-

Použít debugger, breakpointy a call stack.