U login formuláře v base presenteru, vykresleného v layoutu se neprovede on success
- Roman Halaxa
- Člen | 60
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
máš tam {form signInForm}
a <form>, to ti dohromady
fungovat nebude, smaž ten vnitřní <form>
- Roman Halaxa
- Člen | 60
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!