Formulář v samostatné třídě

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

Ahoj mám formulář umístěný v /app/forms/AccountCreateForm.php

<?php
use Nette\Application\UI\Form,
    Nette\ComponentModel\IContainer;

class AccountCreateForm extends Form{
    public function __construct(IContainer $parent = NULL, $name = NULL) {
	parent::__construct($parent, $name);
	$this->addText('accountName', 'Název herního účtu: ')
		->addRule(FORM::FILLED, 'Zadejte prosím název herního účtu.');
	$this->addPassword('password', 'Heslo: ')
		->addRule(FORM::FILLED, 'Zadejte prosím heslo.');
	$this->addPassword('password2', 'Heslo znovu: ')
		->addRule(FORM::FILLED, 'Zadejte prosím heslo znovu pro kontrolu.');
	$this->addText('email', 'E-mail: ')
		->addRule(FORM::FILLED, 'Zadejte prosím e-mail.')
		->addRule(FORM::EMAIL);
	$this->addSubmit('create', 'Vytvořit účet');
	$this->onSuccess[] = $this->accountCreateSucceeded();
    }

    public function accountCreateSucceeded()
    {
	//$this->flashMessage('Herní účet byl založen.', 'success');
	//$this->redirect('this');
	$this->presenter->redirect('this');
    }
}
?>

V presenteru mám

<?php
protected function createComponentAccountCreateForm()
    {
	$form = new AccountCreateForm();
	return $form;
    }
?>

A to skončí chybou:
Nette\InvalidStateException

Component '' is not attached to ‚Nette\Application\UI\Presenter‘.
Co s tím? Díky za odpověď.

David Matějka
Moderator | 6445
+
0
-

mas tam

$this->onSuccess[] = $this->accountCreateSucceeded();

takze to tu metodu zavola, pokud to chces jako callback, musis

$this->onSuccess[] = $this->accountCreateSucceeded;

jinak neni doporucovano dedeni Form, lepsi je treba si na to udelat tovarnicku