onSuccess se nespusti, ale getErrors() vraci prazne pole

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

zdravim
jsem dnes uz hodne mrtvej, ale uz 2 hodiny jsem si lamal hlavu nad jednim formularem, ktery se mi nechce odeslat (nezavola se funkce onSuccess)

v presenteru mam

public function createComponentForm() {
		$form = new \Nette\Application\UI\Form();

		$form->setMethod('post');

		$form->addText("school", "Škola");
		$form->addText("memberOneName", "Jméno")
				 ->setRequired();
		$form->addText("memberOneDate", "Datum narození")
				  ->setRequired();
		$form->addText("memberTwoName", "Jméno")
				 ->setRequired();
		$form->addText("memberTwoDate", "Datum narození")
				  ->setRequired();
		$form->addText("memberThreeName", "Jméno")
				 ->setRequired();
		$form->addText("memberThreeDate", "Datum narození")
				  ->setRequired();
		$form->addText("memberFourName", "Jméno")
				 ->setRequired();
		$form->addText("memberFourDate", "Datum narození")
				  ->setRequired();
		$form->addText("memberFiveName", "Jméno")
				 ->setRequired();
		$form->addText("memberFiveDate", "Datum narození")
				  ->setRequired();
		$form->addText("memberSixName", "Jméno")
				 ->setRequired();
		$form->addText("memberSixDate", "Datum narození")
				  ->setRequired();
		$form->addText("memberSevenName", "Jméno");
		$form->addText("memberSevenDate", "Datum narození");

		$form->addSubmit('submit', 'Přihlásit tým');

		$form->onSuccess[] = callback($this, 'formRegistr');

		return $form;
	}

	public function formRegistr(\Nette\Application\UI\Form $form) {
		$data = $form->getValues();
		dump($data);
		$this->context->prihlaskaModel->save($data);
		$this->redirect('Homepage:default');
	}

formular vykresluji manualne

<?php

	$form->render('begin');


	echo $form['school']->label . $form['school']->control;
	echo "<fieldset>\n<legend>1. člen</legend>";
		echo $form['memberOneName']->label . $form['memberOneName']->control;
		echo $form['memberOneDate']->label . $form['memberOneDate']->control;
	echo "</fieldset>";

	echo "<fieldset>\n<legend>2. člen</legend>";
		echo $form['memberTwoName']->label . $form['memberTwoName']->control;
		echo $form['memberTwoDate']->label . $form['memberTwoDate']->control;
	echo "</fieldset>";

	echo "<fieldset>\n<legend>3. člen</legend>";
		echo $form['memberThreeName']->label . $form['memberThreeName']->control;
		echo $form['memberThreeDate']->label . $form['memberThreeDate']->control;
	echo "</fieldset>";

	echo "<fieldset>\n<legend>4. člen</legend>";
		echo $form['memberFourName']->label . $form['memberFourName']->control;
		echo $form['memberFourDate']->label . $form['memberFourDate']->control;
	echo "</fieldset>";

	echo "<fieldset>\n<legend>5. člen</legend>";
		echo $form['memberFiveName']->label . $form['memberFiveName']->control;
		echo $form['memberFiveDate']->label . $form['memberFiveDate']->control;
	echo "</fieldset>";

	echo "<fieldset>\n<legend>6. člen</legend>";
		echo $form['memberSixName']->label . $form['memberSixName']->control;
		echo $form['memberSixDate']->label . $form['memberSixDate']->control;
	echo "</fieldset>";

	echo "<fieldset>\n<legend>7. člen (náhradník)</legend>";
		echo $form['memberSevenName']->label . $form['memberSevenName']->control;
		echo $form['memberSevenDate']->label . $form['memberSevenDate']->control;
	echo "</fieldset>";

	echo $form['submit']->control;

	$form->render('end');
?>

po odeslani formulare se nespusti funkce definovane v onSuccess. kdyz jsem zadal onError[] = dump($form->getErrors()) tak se mi to spusti, ale vraci prazdne pole…
muze mi nekdo poradit prosim? uz mi to dnes po celem dnu nemysli, ale potreboval bych ten formular co nejdriv zprovoznit?

Nette2, stahovano asi ze dne 23. 9. 2011

Editoval Tomas Jancik (25. 10. 2011 21:38)

Ot@s
Backer | 476
+
0
-

Nevidím důvod, proč by to nemělo fungovat (ještě když to máš takto napřímo v presenteru). Jedině snad, že by komponenta nebyla řádně registrovaná, tj. prubni klasicky

public function createComponentForm($name) {
	$form = new \Nette\Application\UI\Form($this, $name);
	// atd...
}

Editoval Ot@s (26. 10. 2011 8:31)

newPOPE
Člen | 648
+
0
-

Ano tiez som mal s komponentami podobny problem. Nepripajal som ich v konstruktore ale az return z tovarne. @HosipLan sice pisal ze to je jedno. Do urciteho casu vsetko fungovalo, uz si presne nepamatam kde bol vtedy problem ale mam pocit, ze som od toho chcel sablony a neboli tam registrovane helpery a cele sa to spravalo divne…

Filip Procházka
Moderator | 4668
+
0
-

$form->setMethod('post'); vůbec volat nemusíš, post je výchozí.

Co se mi nelíbí, tak to tvoje renderování. Proč to nemáš v šabloně? Zkontroluj si pořádně výsledné HTML.

Tomas Jancik
Člen | 103
+
0
-

HosipLan wrote:

Co se mi nelíbí, tak to tvoje renderování. Proč to nemáš v šabloně? Zkontroluj si pořádně výsledné HTML.

mam to v sablone… mam to kvuli vlastnimu stylovani… na HTML kod jsem zbezne koukal a vypadal v pohode… ale neporovnaval jsem ho s jinyma formularama ktery renderuju klasicky

22
Člen | 1478
+
0
-

echo nemá v šabloně co dělat. Projdi si v dokumenatci nebo v přikladech v distribuci, jak se to dělá.

Tomas Jancik
Člen | 103
+
0
-

je to takhle primo v dokumentaci

pravda ted me napada, ze by to tam asi nemuselo byt, ale vcera mi to uz vazne nemyslelo

22
Člen | 1478
+
0
-

No ale vzhledemk tomu, že máš k dispozici Latte, tak bych se držel Latte rendrování.

edit: imho ten příklad je spíše myšlen pro používaní jen samostatných formulářů.

Editoval 22 (26. 10. 2011 18:41)

Tomas Jancik
Člen | 103
+
0
-

konecne jsem se k tomu zase dostal…
zkusil jsem formular renderovat klasicky

{control form}

uz funguje… chyba teda bude asi nekde u myho renderovani… zkusim na to jeste mrnout podrobnej vecer…

jeste takovej detail

{control $form}

sice formular vypise, ale chova se to uplne stejne jako kdyz to renderuju rucne… zadna chyba, ale taky zadna akce…

zkusil jsem porovnat co to vypisuje a nasel tohle…

{control form}

<input type=„text“ class=„text“ name=„memberSevenDate“ id=„frmform-memberSevenDate“ value="" />

{control $form}

<input type=„text“ class=„text“ name=„memberSevenDate“ id=„frm-memberSevenDate“ value="" />

voda
Člen | 561
+
0
-

A jak předáváš formulář do šablony? Asi ho nemáš připojenej k presenteru.

Tomas Jancik
Člen | 103
+
0
-

voda wrote:

A jak předáváš formulář do šablony? Asi ho nemáš připojenej k presenteru.

celou tu fci createComponentForm mam primo v presenteru…

voda
Člen | 561
+
0
-

Myslel jsem tím, jak plníš proměnnou $form v šabloně.

Tomas Jancik
Člen | 103
+
0
-

kdyz jsem to vykresloval rucne tak jsem delal

$this->template->form = $this->createComponentForm();

kdyz pouzivam klasicke renderovani Nette, tak nic takoveho nedelam a jen v sablone volam

{control form}
voda
Člen | 561
+
0
-

citace z dokumentace

Továrničky nikdy nevoláme přímo, zavolá se sama ve chvíli, kdy komponentu poprvé použijeme.

Pokud ji zavoláš takhle přímo, tak se nepřipojí k presenteru a pak to nefunguje. Pokud ho chceš předat do šablony tak:

$this->template->form = $this['form'];
Tomas Jancik
Člen | 103
+
0
-

tak doufam ze tohle bude ten problem… jak dorazim domu, vyzkousim…

Tomas Jancik
Člen | 103
+
0
-

voda wrote:

citace z dokumentace

Továrničky nikdy nevoláme přímo, zavolá se sama ve chvíli, kdy komponentu poprvé použijeme.

Pokud ji zavoláš takhle přímo, tak se nepřipojí k presenteru a pak to nefunguje. Pokud ho chceš předat do šablony tak:

$this->template->form = $this['form'];

ted uz to funguje perfektne a muzu pokracovat dal… diky

pjoter
Člen | 118
+
0
-

Tak jsem narazil na podobny problem pouzivam <?php $this->template->form = $this[‚form‘]; ?> a nejnovejsi nette. Pri rucnim vykreslovani mi ale formular nevola funkci onSuccess. Kdyz ale pouziju <?php {control form} tak to funguje. Nevi nekdo jak na to ?