Po odeslání formuláře se neprovede žádná metoda

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

Zdravím všechny,

při zapomenutí hesla posílám na mail uživatele token pomocí kterého si může změnit zapomenuté heslo. Všechno funguje suprově, ale v posledním kroku po odeslání nového heslo je prostě ignorována metoda, která má toto heslo uložit do databáze. Přikládám zdrojový kód.

Už na to koukám asi 4 dny a nikde nevidím chybu.

V metodě ‚newPasswordSuccess‘ se neprovede vůbec nic a je úplně přeskočená (vím, že zatím není dopsaná a nic nedělá).

Všechny ostatní formuláře fungují normálně, takže někde asi bude překlep nebo nějaká jiná hezká chyba. Budu rád, za každou radu.

Díky

<?php
    public function createComponentNewPasswordForm() {
	$form = new Form();
	$token = $this->getParameter('token');

	if ($this->context->Database->isTokenValid($token)) {
	    //token je platný
	    $form->addProtection();

	    $form->addGroup('Zadejte nové heslo');

	    $form->addPassword('heslo', 'Nové heslo')
		    ->addRule(Form::FILLED, 'Zadejte nové heslo')
		    ->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaky', 5);


	    $form->addPassword('heslo2', 'Heslo ještě jednou')
		    ->addRule(Form::FILLED, 'Zadejte heslo ještě jednou pro kontrolu')
		    ->addRule(Form::EQUAL, "Zadané hesla se neshodují", $form["heslo"]);


	    $form->addSubmit('send', 'Změnit heslo');

	    $form->addHidden('token1', $token);
	} else {
	    $form->addError('Vygenerovaný odkaz již není platný.');
	}

	$form->onSuccess[] = array($this, 'newPasswordSuccess');
	return $form;
    }

    public function newPasswordSuccess(Form $form) {
	//nove heslo do DB, poslat potvrzující email, přesměrovat na homepage

	$values = $form->getValues();

	$this->context->Database->setNewPassword($values['token1'], $values['heslo']);

	print_r($values);
	die();

	$this->flashMessage('Heslo nastaveno !');
	$this->redirect('Homepage:');
    }
?>
jiri.pudil
Nette Blogger | 1032
+
0
-

Form je Nette\Application\UI\Form?

kolmano
Člen | 2
+
0
-

Ano Form je Nette\Application\UI\Form

petr.pavel
Člen | 535
+
0
-

Proběhne ti po odeslání ta část, kde se definuje submit button „send“? Možná, že ne a formulář nepovolí odeslání neexistujícím tlačítkem.

Taky bych zkusil to ladící die('neco'); hodit hned na začátek newPasswordSucces(), ať máš jistotu, že se fakt neprovádí.

No a na závěr: Doporučuju investovat trochu času a rozjet krokování v nějakém IDE. Pak pro tebe takovéhle oříšky přestanou být problém.