Prihlasovací formulár v snippet-e sa neprekreslí
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Danndy
- Člen | 35
Ahoj. Mám problém s prekreslením formuláru ktorý obsahuje chybové hlášky cez ajax.
Mám definovaný prihlasovací formulár v BasePresenter.php (formular sa zobrazuje v hlavnom dropdown menu) :
/** @var SignFormFactory @inject */
public $factory;
/**
* Sign-up form factory.
* @return Nette\Application\UI\Form
*/
protected function createComponentDropdownSignInForm()
{
$form = $this->factory->create();
return $form;
}
onSuccess metóda vyzera nasledovne:
public function formSucceeded(Form $form, $values)
{
if ($values->remember) {
$this->user->setExpiration('14 days', FALSE);
} else {
$this->user->setExpiration('60 minutes', TRUE);
}
try {
$this->user->login($values->username, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
if($e->getCode() == Nette\Security\IAuthenticator::INVALID_CREDENTIAL) {
$form['password']->addError('nesprávne heslo');
} else if($e->getCode() == Nette\Security\IAuthenticator::IDENTITY_NOT_FOUND) {
$form['username']->addError('prezívka neexistuje');
} else {
$form['send']->addError('Prihlásenie zlyhalo.');
}
$form->getPresenter()->flashMessage('login failed');
$form->getPresenter()->redrawControl('flashes');
$form->getPresenter()->redrawControl('dropdownForm');
}
}
A latte je definované nasledovne:
<li style="padding:5px 10px; min-width:200px;">
{snippet dropdownForm}
{form dropdownSignInForm, class => 'ajax'}
<div class="form-group {if $form['username']->hasErrors()}has-error{/if}">
<div class="input-group input-group-sm">
<span class="input-group-addon" id="username-icon"><span class="glyphicon glyphicon-user" aria-hidden="true"></span></span>
<input n:name="username" type="text" class="form-control" placeholder="prezívka" aria-describedby="username-icon">
</div>
{if $form['username']->hasErrors()}
<label class="control-label" for="inputError1">prezívka neexistuje</label>
{/if}
</div>
<div class="form-group {if $form['password']->hasErrors()}has-error{/if}">
<div class="input-group input-group-sm">
<span class="input-group-addon" id="password-icon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span>
<input n:name="password" type="password" class="form-control" placeholder="heslo" aria-describedby="password-icon">
</div>
{if $form['password']->hasErrors()}
<label class="control-label" for="inputError1">nesprávne heslo</label>
{/if}
</div>
<div class="checkbox">
<label>
<input n:name="remember" type="checkbox"> ostať prihlásený
</label>
</div>
<button n:name="send" type="submit" class="btn btn-default btn-sm">Prihlásiť</button>
{if $form['send']->hasErrors()}
<label class="text-danger control-label">Prihlásenie zlyhalo</label>
{/if}
{/form}
{/snippet}
</li>
Keď prihlasovací formulár odošlem a prihlasovacie údaje su nesprávne, tak sa prekreslia len flash messages („login failed“), ale formulár nie. V http resposnse je taktiež len kód pre flashes snippet. Snippet v ktorom je umiestneý formulár sa proste neprekreslí.
Vie mi niekto poradiť kde robím chybu?