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
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();
}
?>