fatal error při změně třídy

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

Zdravím,
mám tlačítko cancel v normálním formuláři, které jsem udělal doslova dle návodu zde na webu:

$presenter = $this;
$form->addSubmit('cancel', 'Cancel')
	->setValidationScope(FALSE)
	->onClick[] = function () use ($presenter) {
		$presenter->redirect('default');
	};

všechno funguje jak má. Když ale přidám řádek o změně třídy tlačítka, aby mi to udělalo grafiku z bootstrapu:

$presenter = $this;
$form->addSubmit('cancel', 'Cancel')
	->setValidationScope(FALSE)
	->getControlPrototype()->class("btn primary")
	->onClick[] = function () use ($presenter) {
		$presenter->redirect('default');
	};

dostávám tenhle error, který mi ani nevyhodí Laděnku:

Fatal error: Method Nette\Utils\Html::__toString() must not throw an exception in /mnt/data/accounts/h/Nette/nette.min.php on line 4299
llook
Člen | 407
+
0
-

getControlPrototype nevrací ten $form jako některé ostatní metody, ale objekt reprezentující jeho HTML element. To samé potom ten class. Zkrátka ten ->onClick se pokoušíš volat nad jiným objektem, než bys chtěl. Zkus to nějak takhle:

$presenter = $this;
$cancelButton = $form->addSubmit('cancel', 'Cancel');
$cancelButton->setValidationScope(FALSE);
$cancelButton->getControlPrototype()->class("btn primary");
$cancelButton->onClick[] = function () use ($presenter) {
                $presenter->redirect('default');
        };
Hafran
Člen | 121
+
0
-

Super díky, funguje.

bojovyletoun
Člen | 667
+
0
-

Pro zajímavost, bez Debuggeru to háže jinou chybu (což lokalizuje chybu přesněji):
Catchable fatal error: Object of class Closure could not be converted to string in ...Html.php

vs Fatal error: Method Nette\Utils\Html::__toString() must not throw an exception in ...