Nefunkční odeslání formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jerry
- Člen | 9
Zdravím, moje snaha byla vytvořit formulář kde se uživatel přihlásí a v případě že přihlášen je, je místo formuláře jiný zobrazující přihlášeného + button na odhlášení.
Pokusil jsem se to vyřešit následovně:
class LogInForm {
private $user;
public function __construct(Authenticator $mAuthenticator, User $mUser) {
$this->user = $mUser;
$this->user->setAuthenticator($mAuthenticator);
}
public function create() {
$form = new Form();
$form->addText('userName');
$form->addPassword('userPassword');
$form->addSubmit('login', 'LOG IN');
$form->onSuccess[] = [$this, 'logInSucceeded'];
return $form;
}
public function logInSucceeded(Form $form, ArrayHash $values) {
try {
$this->user->login($values->userName, $values->userPassword);
} catch (AuthenticationException $ex) {
$form->addError(-1);
}
}
}
class LogOutForm {
private $user;
public function __construct(Authenticator $mAuthenticator, User $mUser) {
$this->user = $mUser;
$this->user->setAuthenticator($mAuthenticator);
}
public function create() {
$form = new Form();
$form->addSubmit('logout', 'LOG OUT');
$form->onSuccess[] = [$this, 'logOutSucceeded'];
return $form;
}
public function logOutSucceeded() {
$this->user->logout(true);
}
}
A layout
{if !$user->isLoggedIn()}
<form n:name=logInForm>
<input n:name=userName> <br />
<input n:name=userPassword> <br />
<input n:name=login>
</form>
{else}
<form n:name=logOutForm>
<p>Jsi přihlášený jako {$user->id}</p> <br />
<input n:name=logout>
</form>
{/if}
Přihlašovací formulář funguje v pohodě, vypíšu jméno, heslo, autentikátorem to projde, uživatel se přihlásí, dokonce i druhej formulář mi to zobrazí, problém nastává při odhlašování, kdy po kliknutí na submit se nic nestane, respektive ani když před „$this->user->logout(true);“ dám throw tak to nehodí chybu, ergo hádám že se metoda pro zpracování formuláře vůbec nevykoná a za nic na světě nemůžu přijít na to proč, za každou radu budu moc vděčnej :-) Předem dík