Nefunkční $form->onSuccess[]
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- thirdknown
- Člen | 26
V Nette teprve začínám.
Mám problém s tím, že se nechce volat událost onSuccess po odeslání
formuláře.
Továrna:
<?php
namespace App;
class LoginForm extends \Nette\Application\UI\Form {
public function __construct() {
parent::__construct();
$this->setAction("/sign");
$this->addText("email", "Váš email");
$this->addPassword("password", "Heslo");
$this->addSubmit("send");
$this->onSuccess[] = callback($this, 'SignInFormSubmitted');
// $this->onSuccess[] = array($this, 'SignInFormSubmitted');
// $this->onSuccess[] = $this->SignInFormSubmitted;
// Žádná z těch tří nefunguje
}
public function SignInFormSubmitted (\Nette\Application\UI\Form $form) {
$values = $form->getValues();
$this->getUser()->login($values->name, $values->password);
$this->redirect("Sign");
}
}
?>
A použití v presenteru:
<?php
namespace App\Presenters;
class SignPresenter extends \Nette\Application\UI\Presenter {
public $authenticator;
public $user;
public $loginForm;
public function __construct(\Nette\Security\User $user, \App\Authenticator $authenticator, \App\LoginForm $loginForm) {
$this->authenticator = $authenticator;
$this->user = $user;
$this->user->setAuthenticator($authenticator);
$this->loginForm = $loginForm;
}
public function createComponentSignInForm () {
return $this->loginForm;
}
public function renderDefault () {
$this->template->ok = "No Login";
if ($this->getUser()->isLoggedIn()) {
$this->template->ok = "Logged";
}
}
public function renderOut () {
$this->getUser()->logout();
}
}
?>
Sice jsem už pročítal fóra, něco už jsem objevil, ale stále to
nefunguje.
Zkoušel jsem to i bez továrny v presenteru, ale nic.
Díky moc.
- one-two
- Člen | 80
Tady je víc problémů
- To první neni továrna, ale obyčejná poděděná třída. Továrna je popsaná zde
- Pokud nechceš továrnu viz odkaz, tak musíš mít
v createComponentForm
return new LoginForm();
- Co se týče metody co zpracovává formulář, tak pak fungovat taky
nebude, jelikož v
$this
nemáš Presenter ale Form, takže bys měl mít případně$this->getPresenter()->redirect()
atd
- bych dal pryč to ruční nastavení action
- thirdknown
- Člen | 26
Díky moc vám oběma.
- Chápu, opravil jsem.
- Opraveno
Nefunkčnost byla dána nastavením $form->setAction(). Sice zatím nechápu proč, ale jsem rád, že to funguje!