User Warning: Form was submitted but there are no associated handlers

David Grudl
Nette Core | 7780
+
+3
-

Formuláře od verze 3.1.4 kontrolují, zda mají nějaký obslužný handler, tj. je zavěšené volání metody pro onSuccess, onSubmit nebo onClick na tlačítku:

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

Pokud chybí, vyhodí varování Form was submitted but there are no associated handlers.

Důvod je ten, že se stává, že programátor, zejména začátečník, zapomene asociovat obslužný handler a pak složitě pátrá, proč odesílání formuláře nefunguje. Tohle by mu mělo usnadnit vývoj.

Marek Bartoš
Nette Blogger | 720
+
+1
-

Upozornění je to fajn, ale myslím že začátečník si bude pořád říkat, co má být ten associated handler a bude muset sám zjistit, jak problém vyřešit. Moc by se mi líbilo, kdyby Nette v chybách vysvětlovalo jaká událost nastala, co je v ná za problém a jak ji vyřešit. Momentálně je třeba si řešení domyslet.

Context: Form with ID product-form was submitted.
Problem: Form has no handler to process it on success.
Solution: Add callback to Form->onSuccess[] or Form->onSubmit[] to process sent data.

Editoval Marek Bartoš (29. 8. 2021 15:01)

David Grudl
Nette Core | 7780
+
+4
-

Ono to vysvětlení obvykle nejde udělat jednou větou, proto jsem vlastně založil tohle vlákno, aby se hláška dala vygooglit a tam najít řešení.

uživatel-p
Člen | 553
+
0
-

Hm i když jsem začátečník od roku 2014, tak se mi zrovna minulý týden podařilo přesně tuhle botu udělat.
Konkrétně jsem měl strukturu takovou, že jsem dělal formulář jako komponentu a tedy jsem měl více navěšených onSuccess metod.
Jednu, která se v komponentě starala o zpracování dat a jednu, která se v Presenteru starala o přesměrování po úspěšném dokončení.

Problém byl, že jsem navěštil tu událost z Presenteru, ale zapomněl jsem navěštit zpracování dat, takže redirect s flashMessage proběhl v pohodě, ale data se nezpracovala. Divil jsem se a docela dlouho na můj vkus jsem hledal kde je chyba a proč se mi nevolá update nad databází.

Když jsem si všiml, že mi tam chybí navěšení události, tak jsem se sám divil, že po takové době, kdy jsou formy denní chleba jsem udělal takovou chybu. A to, že to formuláře tvořím často přispělo taky k tomu, že jsem tuto konkrétní chybu nehledal.

Za mě rozhodně +.
Můj problém to sice neřeší, jelikož by to bralo, že mám vše ok, jelikož by to bralo jako navěšenou událost z presenteru starající se o přesměrování, ale i tak si myslím, že to je dobrý nápad.

Michal Kumžák
Člen | 106
+
0
-

Problém byl, že jsem navěštil tu událost z Presenteru, ale zapomněl jsem navěštit zpracování dat, takže redirect s flashMessage proběhl v pohodě, ale data se nezpracovala. Divil jsem se a docela dlouho na můj vkus jsem hledal kde je chyba a proč se mi nevolá update nad databází.

To by ti v tomto případě, ale tato úprava nepomohla, jestli sem to pochopil správně.

uživatel-p
Člen | 553
+
+1
-

Michal Kumžák napsal(a):

Problém byl, že jsem navěštil tu událost z Presenteru, ale zapomněl jsem navěštit zpracování dat, takže redirect s flashMessage proběhl v pohodě, ale data se nezpracovala. Divil jsem se a docela dlouho na můj vkus jsem hledal kde je chyba a proč se mi nevolá update nad databází.

To by ti v tomto případě, ale tato úprava nepomohla, jestli sem to pochopil správně.

Nepomohla. Proto jsem taky psal:

Můj problém to sice neřeší, …

Jen jsem chtěl poukázat na to, že to je dobrý nápad, jelikož když se to může stát někomu, kdo s Nette pracuje 7 let, tak se to určitě stává nováčkům.

Editoval Polki (30. 8. 2021 16:37)

finwe
Člen | 58
+
0
-

Jak tohle funguje u GET formulářů? Protože tam můžu chtít prostě načíst stránku s GET parametrama a handler mi tam nacpe get parametr, kterej nechci. A přesměrovat z handleru mi přijde zbytečná práce a request navíc.

David Grudl
Nette Core | 7780
+
0
-

U GET formulářů by se to asi kontrolovat nemuselo. Proč tam handler cpe parametr?

finwe
Člen | 58
+
0
-

To já nevim, proč :) Ale v url je &do=searchForm-submit