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
+
0
-

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

Hyli
Člen | 5
+
0
-

A proč potřebuješ mít odhlášení jako formulář? Nestačil by odkaz na metodu actionOut()?

public function actionOut()
{
    $this->getUser()->logout();
    $this->flashMessage('Odhlášení proběhlo úspěšně', "success");
    $this->redirect('default');
}

Editoval Hyli (19. 11. 2016 0:41)