ReflectionException Function () does not exist
- pavelinnuendo
- Člen | 33
Zdědil jsem jeden projekt v Nette 2.3 a potřebuji jej zmigrovat do 2.4., nicméně jsem si vylámal zuby na této chybě, která se zobrazí, pokud odešlu form:
ReflectionException #04
message protected => "Function () does not exist"
string private => ""
code protected => 0
file protected => "/var/www/html/vendor/nette/reflection/src/Reflection/GlobalFunction.php"
line protected => 45
trace private => array (10)
previous private => null
xdebug_message => "
ReflectionException: Function () does not exist in /var/www/html/vendor/nette/reflection/src/Reflection/GlobalFunction.php on line 45
Problém je v tom, že v poli $handlers je první záznam null:
vendor/nette/forms/src/Forms/Form.php:446 source Nette\Forms\Form->invokeHandlers(arguments)
$handlers
array (2)
0 => null
1 => Closure #01
file => "/var/www/html/app/AdminModule/PriceModule/Presenters/PriceListPresenter.php"
line => 32
variables => array ()
parameters => "$form"
Můžete mi prosím navézt, čím by to mohlo být?
Editoval pavelinnuendo (18. 3. 2018 0:51)
- pavelinnuendo
- Člen | 33
No to je právě problém, jaký kód z toho množství kódu. :)
Už jsem přišel na to, co to způsobuje, a to pokud na Form objektu nastavím více než jednou:
$form->onSuccess[] = function ($form) {}
to zapříčiní tuto divnou chybu, není to bug?
Je možné, pokud potřebuji reagovat na odeslání formuláře na dvou
místech, toto tedy vyřešit nějak jinak?
- pavelinnuendo
- Člen | 33
No právě že ano, je to tam na dvou místech. Proč je to špatně? Je na to nějaký workaround?
- pavelinnuendo
- Člen | 33
Aha, ano, tak to byl celý problém, jedna funkce není anonymní:
$this->onSuccess[] = $this->saveValuesToEntity();
Když jsem to přepsal na:
$this->onSuccess[] = function($form) {
$this->saveValuesToEntity();
};
tak to funguje. Jde o správné řešení?
Děkuji moc!
Editoval pavelinnuendo (18. 3. 2018 14:55)