U login formuláře v base presenteru, vykresleného v layoutu se neprovede on success

Roman Halaxa
Člen | 60
+
0
-

Ahoj,

už si nevím rady. Mám v base presenteru login formulář

public function createComponentSignInForm()
{
    $form = new Form();
    $form->setTranslator($this->translator);
    $form->getElementPrototype()->class('ajax');

    $form->addText("email")
        ->setRequired()
        ->setHtmlAttribute("placeholder", $this->translator->translate("common.emailPlaceholder"))
        ->setHtmlAttribute("class", "login-input-name")
        ;

    $form->addPassword("password")
        ->setRequired()
        ->setHtmlAttribute("placeholder", $this->translator->translate("common.passwordPlaceholder"))
        ->setHtmlAttribute("class", "login-input-password")
        ;

    $form->addCheckbox("stayLoggedIn")
        ->setHtmlAttribute("class", "login-checkbox")
        ;

    $form->addSubmit("login")
        ->setHtmlAttribute("class", "login-button")
        ;

    $form->addSubmit("resetPassword")
        ->setHtmlAttribute("class", "login-button")
        ;

    $form->onSuccess[] = [$this, "login"];

    return $form;
}

public function login($form, $values)
{
    bdump("On success vyvolán!");
    $values = $form->getValues();

    if ($values["stayLoggedIn"]) {
        $this->user->setExpiration('30 minutes');
    } else {
        $this->user->setExpiration('14 days');
    }

    $this->user->login($values["email"], $values["password"]);

    if($this->presenter->isAjax()) {
        $this->presenter->redrawControl("headerSnippet");
    } else {
        $this->presenter->redirect("this");
    }

    $this->redrawControl("headerSnippet");
}
{form signInForm}
    <div class="login">
        <div class="login-close"><i class="fas fa-times"></i>Zavřít</div>
        <div class="login-box">
            <div class="login-title">Přihlášení</div>
            <form autocomplete="off">
                {input email}
                {input password}
                <div class="login-checkbox-wrapper">
                    {input stayLoggedIn}
                    <div class="checkbox-text">Zůstat přihlášený</div>
                </div>
                <button type="submit" n:name="login"><i class="fas fa-unlock"></i>{_common.login}</button>
            </form>
            <div class="login-other">
                <div class="reset-button">{_common.forgottenPassword}</div>
                <a href="{link Registration:}" class="item reg">{_common.registration}</a>
            </div>
        </div>
        <div class="password-reset-box password-box-hidden">
            <div class="login-title">Resetování hesla</div>
            <form autocomplete="off">
                {input email}
                <button n:name="resetPassword"><i class="fas fa-envelope"></i>{_common.resetPassword}</button>
            </form>
            <div class="login-other">
                <div class="reset-button-back">{_common.backToLogin}</div>
            </div>
        </div>
    </div>
{/form}

Když kliknu na login tlačítko neprovede se vůbec nic. Ten dump on success vyvolán se nestane.

Ještě jsem zkoušel variantu form->isSuccess a ta mi napíše že formulář není anchored, tudíž nemůže zjistit jestli je odeslán. Možná to s tím souvisí ale předpokládám že když to tu chybu nehází tak jak to mám tak asi ne… Už nevím co by to mohlo být

Nette ajax je inicializovaný správně, v konzoli žádné chyby nejsou a funguje to na překreslení headeru při logoutu takže tím to myslím taky nebude

Díky za váš čas

EDIT: víc info

classa je nette\application\ui\form

závislosti:
„php“: „>= 7.1“,
„nette/application“: „^3.0“,
„nette/bootstrap“: „^3.0“,
„nette/caching“: „^3.0“,
„nette/database“: „^3.0“,
„nette/di“: „^3.0“,
„nette/finder“: „^2.5“,
„nette/forms“: „^3.0“,
„nette/http“: „^3.0“,
„nette/mail“: „^3.0“,
„nette/robot-loader“: „^3.0“,
„nette/security“: „^3.0“,
„nette/utils“: „^3.0“,
„latte/latte“: „^2.5“,
„tracy/tracy“: „^2.6“,
„nettrine/orm“: „^0.7.1“,
„nettrine/cache“: „^0.2.0“,
„contributte/console“: „^0.8.0“,
„nettrine/annotations“: „^0.6.2“,
„contributte/translation“: „^0.7.1“

verze php: 7.3.5

EDIT2:
možná souvisí s tím že je formulář modální? (OTESTOVÁNO, NESOUVISÍ)

Editoval Roman Halaxa (5. 11. 2020 13:41)

David Matějka
Moderator | 6445
+
+2
-

máš tam {form signInForm} a <form>, to ti dohromady fungovat nebude, smaž ten vnitřní <form>

Roman Halaxa
Člen | 60
+
0
-

David Matějka napsal(a):

máš tam {form signInForm} a <form>, to ti dohromady fungovat nebude, smaž ten vnitřní <form>

Děkuji moc, máš pravdu. Vyřešeno!