formulář neprovádí žádnou akci

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

Hezký večer,
mám widget, ve kterém mám

class WidgetLogin extends Control
 public function render()
 {
 		$form = new AppForm;
		$form->addText('username', 'Uživatelské jméno:')
			->addRule(Form::FILLED, 'Zapomněli jste vyplnit uživatelské jméno.');

		$form->addPassword('password', 'Heslo:')
			->addRule(Form::FILLED, 'Zapomněli jste vyplnit heslo.');

		$form->addSubmit('login', 'Přihlásit');
		$form->addProtection('Zkuste to prosím znova.');

		$form->onSubmit[] = callback('WidgetLogin::loginFormSubmitted');
		print $form;
 }



public function loginFormSubmitted() {
kód . .

bohužel akce loginFormSubmitted se vůbec neprovede. Přitom když dám v render výpis $_POST, tak data přišli. Kde je jádro pudla?
Díky

jasir
Člen | 746
+
0
-

Jádro pudla je v callback($this, 'loginFormSubmitted')

onny
Člen | 67
+
0
-

Nenene, tamto co tam mám je ze zoufalosti, s $this se situace nezmění – opět se nic neprovádí.

jasir
Člen | 746
+
0
-

Aha, už to vidím. Vyndej definici z render a dej jí do továrničky, tj.

<?php
public function createComponentLoginForm() {
  $form = new AppForm();
  ...
  return $form;
}
?>

Funkce render se provádí v render fázi, to je pozdě.
Tvoje render by měla vypadat nějak takto:

<?php
public function render() {
	$this->template->setFile(dirname(__FILE__) . '/loginForm.phtml');
	$this->template->form = $this['loginForm'];
	$template->render();

	//nebo opravdu jen: echo $this['loginForm']
}
?>

a k tomu loginForm.phtml

Wow, moje prvni komponenta... Co obsahuje další komponentu...
{$form}

No ale vzhledem k tvému zmatení opravdu doporučuji dokumentaci.

Editoval jasir (14. 10. 2010 1:00)

onny
Člen | 67
+
0
-

Díky to bude ono, dám to tam. Z nějakých historických důvodů je hloupost už jen to, že widget volá print. Ale to snad je lepší nechat být :).

Díky za pomoc