Neexistující callbacky nevyhazují chybu

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

Jedna věc mě na Nette docela vytáčí:
Když pro události formuláře zaregistruji neexistující callback, tak se nic neděje.

Např. když nastavím

$form->onSubmit[] = array($this, 'takTohleAniNemůžeExistovat,proboha+-*/');

tak formulář prostě nereaguje, a to je všechno.

Tohle chování znepříjemňuje vývoj… Co jsem si všimnul, tak třeba onStartup na Application kontroluje, jestli je callback „callable“.
Co o tom víte a co si o tom myslíte?

Vyki
Člen | 388
+
0
-

PJK napsal(a):
Co o tom víte a co si o tom myslíte?

… že máš pravdu. Zkoušel jsem to i:

<?php
	$form->onSubmit[] = callback($this, 'callbackNaNic9*[');
?>

a výsledek stejný jako při registraci callbacku „klasicky“. Chyba nastane až po odeslání. Určitě by bylo fajn kdyby to upozornilo na neplatnost callbacku už při registraci.

PJK
Člen | 70
+
0
-

a výsledek stejný jako při registraci callbacku „klasicky“. Chyba nastane až po odeslání. Určitě by bylo fajn kdyby to upozornilo na neplatnost callbacku už při registraci.

Nee, chyba nenastane. Ani když přehodím do produkčního a zapnu logování, tak v logu nic není. To znamená, že je něco špatně.
A pokud jde o validaci při registraci, je trochu nepříjemné to, že co není volatelné při registraci, může už být dostupné v momentě volání callbacku. Spokojil bych se s tím, kdyby se to chovalo jako ono zmiňované Application->onStartup/onShutdown (nebo s vysvětlením, proč to tak není).

Jo a aby bylo jasno, je to Nette 0.9.4 ae0c8bd (php 5.3).

Editoval PJK (24. 7. 2010 0:35)

Vyki
Člen | 388
+
0
-

Mě tedy chyba po odeslání vyskakuje.

MemberAccessException
Call to undefined method Build_FrontPresenter::registerFormSubmittedsss().

PHP 5.3.2, Nette Framework 0.9.5 (revision 5eb03f5 released on 2010–07–01)

Ondřej Mirtes
Člen | 1536
+
0
-

Testuješ přidání callbacku i odeslání na jednom formuláři? Jakou máš verzi PHP?

PJK
Člen | 70
+
0
-

@Ondřej Mirtes:

Ano, je to ten samý formulář. Myslel jsem, že z prvního příspěvku je to jasné.

  • # PHP 5.3.1
  • # Apache/2.2.14 (Win32) PHP/5.3.1
  • # Nette Framework 0.9.4 (revision ae0c8bd released on 2010–04–14)

Ještě zkusím novější Nette…

Ondřej Mirtes
Člen | 1536
+
0
-

Seš po odeslání formuláře na adrese ?do=form-submit?

Namísto form si dej název svého formuláře v továrničce (createComponentForm).

Pokud je to skutečně chyba ve frameworku a ne mezi klávesnicí a židlí, chtělo by odkrokovat, kde se to pokazí. Kdyžtak sem hoď zdrojáky a uvidíme.

PJK
Člen | 70
+
0
-

Tak, a teď si připadám jak debil. Teď se všechno chová, jak má.

Fakt netuším, jak je toto možné. Napadá mě leda nějaký balast v cache (frameworku/apache/?). Dokud se mi znovu nepovede dostat se ke stejnému chování, nemá cenu to řešit.

kravčo
Člen | 721
+
0
-

Tipol by som to na chybu na inom mieste v aplikácii. Nette\Callback i skratka callback() totiž kontrolujú callback už pri vytváraní.