Zpracování formuláře v BasePresenteru

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

Zdravím, mám vytvořený formulář v BasePresenteru, ale potřebuji aby se po odeslání volala metoda také z base presenteru, protože takto se mi volá metado z HomepagePresenter, nebo z toho presenteru, ve kterém se pohybuji, poradí někdo jak na to? Mám to takto řešené, protože je to hlavní formulář, který potřebuji pořád viditelný a funkční na celém webu.

$form->onSuccess[] = $this->UploadFormSubmitted;
Hurass
Člen | 114
+
0
-

Nakonec jsem to vyřešil..

$form->onSuccess[] = callback('BasePresenter', 'uploadFormSubmitted');
public static function uploadFormSubmitted(Form $form) {

}
Jiří Nápravník
Člen | 710
+
0
-

Lepší bude nestaticky, tedy:

callback($this, 'uploadFormSubmitted');

public function uploadFormSubmitted(Form $form) {

}

no a od 2.1 je callback deprecated, takže bude úplně nejlepší

array($this, 'uploadFormSubmitted')
llook
Člen | 407
+
0
-

Statická metoda je řešení. Lze použít i instanční metodu a přitom potlačit její předefinování v rozšiřující třídě, ale není to moc čistá technika:

$form->onSuccess[] = (new \ReflectionMethod(__CLASS__, 'UploadFormSubmitted'))->getClosure($this);
Hurass
Člen | 114
+
0
-

Díky za rady, nejvíce se mi zamlouvá řešení od Jirky.

llook
Člen | 407
+
0
-

Řešení od Jirky neřeší tvůj problém. array($this, 'uploadFormSubmitted') je totéž, co $this->UploadFormSubmitted.