Errory ve folmuláři po redirectu zmizí

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ImUnicorn
Člen | 12
+
0
-

Zdravím,

napsal sem si přihlašovací formulář, který funguje s Ajaxem. Kdyby ale náhodou měl někdo vypnutý javascript v prohlížeči, tak jsem přidal podmínku a pokud request není ajax, tak se použije normální redirect() místo redrawControl(). Bohužel po redirectu se mi nezobrazí errory ve formuláři. Neví někdo co může být špatně?

<?php
<?php

namespace App\AdminModule\Components;

use App\Models\User as UserModel;
use Kdyby\Translation\Translator;
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
use Nette\Http\Request;
use Nette\Security\AuthenticationException;
use Nette\Security\User;

class SignInForm extends Control {

	/**
	 *
	 * @var User
	 */
	private $user;

	/**
	 *
	 * @var Translator
	 */
	private $translator;

	/**
	 *
	 * @var Request
	 */
	private $request;

    public function __construct(User $user, Translator $translator, Request $request) {
		parent::__construct();

		$this->user = $user;
		$this->translator = $translator;
		$this->request = $request;
    }

	public function render() {
		$this->template->setFile(__DIR__ . '/SignInForm.latte');
		$this->template->render();
	}

	public function createComponentSignInForm() : Form {
		$form = new Form();

		$form->addText('email')
				->addRule(Form::FILLED, $this->translator->translate('sign_in.error.email.not_filled'))
				->addRule(Form::EMAIL, $this->translator->translate('sign_in.error.email.not_email'))
				->addRule(Form::MAX_LENGTH, $this->translator->translate('sign_in.error.email.max_length', ['maxLength' => UserModel::EMAIL_MAXLENGTH]));
		$form->addPassword('password')
				->addRule(Form::FILLED, $this->translator->translate('sign_in.error.password.not_filled'));
		$form->addCheckbox('remember_me');
		$form->addSubmit('submit');

		$form->onError[] = [$this, 'signInFormError'];
		$form->onSuccess[] = [$this, 'signInFormSuccess'];

		return $form;
	}

	public function signInFormError(Form $form) {
		if($this->request->isAjax()) {
			$this->redrawControl('snSignInForm');
		} else {
			$this->presenter->redirect('Sign:In');
		}
	}

	public function signInFormSuccess(Form $form) {
		$values = $form->getValues();

		try {
			$this->user->login($values->email, $values->password);

			if(isset($values->remember_me)) {
				$this->user->setExpiration(0);
			}

			$this->presenter->redirect('Dashboard:default');
		} catch (AuthenticationException $ex) {
			$form->addError($ex->getMessage());
		}
	}
}

interface ISignInFormFactory
{
    /**
	 *
	 * @return SignInForm
	 */
    function create();
}
?>
David Matějka
Moderator | 6445
+
+2
-

neprovadej redirect pri erroru

ImUnicorn
Člen | 12
+
0
-

David Matějka napsal(a):

neprovadej redirect pri erroru

Sem to ale blbec :-D Díky moc :)