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

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?

Danndy
Člen | 35
+
0
-

Zistil som že je to sposobené tym, že celé hlavne menu je includovany .latte súbor. Keď html kod z menu.latte prekopirujem priamo do @layout.latte, tak to funguje. Ale ako to vyriešiť aby som moje menu mohol mat v samostatnom latte?