Form onSuccess nefunguje při manuálním vykreslení

krust
Člen | 14
+
0
-

Zdravím, chci kvůli stylování vykreslovat formulář manuálně, přes tagy {form formular} a {input …}/{label …}
Formulář se vykreslí hezky, nicméně $form->onSuccess[] funkce se neprovede. V případě, že formulář vykreslím „klasicky“ přes {control formular}, tak onSuccess metoda funguje normálně. Řešil tohle někdo z vás?
Děkuji

Šaman
Člen | 2632
+
0
-

Máš nejspíš nějakou chybu v tom vykreslení. Méně pravděpodobně v definici formuláře. Bez ukázkového kódu těžko něco radit.

krust
Člen | 14
+
0
-
	$form = new Form;

		$form->addText('psc','PSČ')
				 ->setAttribute('class', 'form-control')
				 ->setAttribute("placeholder","zadejte PSČ");

		$form->addText('obec','Obec')
				 ->setAttribute('class', 'form-control')
				 ->setAttribute("placeholder","zadejte obec");

	  $form->addText('ulice','Ulice')
				 ->setAttribute('class', 'form-control')
				 ->setAttribute("placeholder","zadejte ulici");

	$form->addText('jmeno','Jméno')
	 			 ->setAttribute('class', 'form-control')
	 			 ->setAttribute("placeholder","zadejte jméno");


	$form->addText('max','Maximální počet')
	 			 ->setAttribute('class', 'form-control')
	 			 ->setAttribute("placeholder","maximální počet");

		$form->addSubmit('hledat','Hledat')
				 ->setAttribute('class','btn btn-info waves-effect waves-light');

	  $form->onSuccess[] = [$this, 'formularSucceeded'];

		return $form;

a pak

public function formularSucceeded($form){

		$values = $form->getValues();
		print_r($values);die();

	}

v latte mám dlouhým html kódem nastylovaný formulář, ale ve zkratce:

{form formular}
<div>
	{label mesto}
	{input mesto}
</div>
{input hledat}
{/form}

a pak ten stejný formulář vykresluji pomocí tagu

{control formular}

Ten první nezavolá onSuccess, ten druhý ano. První udělá jen refresh stránky, druhý udělá die a vypíše hodnoty z formuláře

nightfish
Člen | 468
+
+1
-

@krust Pravděpodobně neprojde validace hodnot formuláře.

Nemůže se stát, že máš třeba nějaké pole required, ale při manuálním vykreslení jej vynecháš? Případně pokud to ještě neděláš, vypiš si při manuálním vykreslení chyby formuláře ($form->getErrors()).

krust
Člen | 14
+
0
-

Možná by pomohlo, že hidden input

<input type="hidden" name="_do" value="formular-submit">

je v prvním formuláři mimo <form></form> značky

Editoval krust (17. 11. 2020 11:07)

Kamil Valenta
Člen | 752
+
0
-

Pravděpodobně je chyba ukrytá mimo „ve zkratce“. Pošli prosím větší kus té šablony, zřejmě jsi chybu vypustil jako nedůležitou část kódu.

Také bych si v šabloně dumpnul {$form->getErrors()}
a uvidíš, zda nechybí nějaké povinné pole. Např u selectu.
Ale pokud platí definice, cos poslal, tak tam select ani required pole není…

dms
Člen | 87
+
0
-

Zkontroluj jestli mas spravny use v presenteru

use Nette\Application\UI\Form;

Šaman
Člen | 2632
+
0
-

@krust Fungovat by to mělo. Někde je zakopaná chyba. Doporučuji zkusit to odladit na primitivním testovacím formuláři. Nezapomeň na nějaké základní vypsání chyb (při použití {control formName} se chyby vypíšou, při manuálním to musíš udělat sám). OnSuccess se totiž spustí jen v případě, že formulář byl úspěšně zvalidován.

krust
Člen | 14
+
0
-

Pánové, jdu se postavit na hanbu do rohu, v latte zůstala koncová značka </form> mezi tagy {form formular}{/form}… omlouvám se za nepozornost, přeji hezký sváteční den :-)