Задать вопрос
@balex777

Вывод ошибок авторизации в модальном окне yii2, как сделать?

У меня форма авторизации и регистрации в модальном окне(не важно как сделано, но для интересующихся через виджет)
Надо что бы при вводе логина и пароля выводило ошибку, не правильный логин(под полем логин) или не правильный пароль(под полем пароль) после нажатия на кнопку войти

В стандартной форме LoginForm валидируется только пароль, для того чтобы валидировался и логин я создал метод
public function validateUsername($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();
            if (!$user) {
                $this->addError($attribute, 'Не правильный логин.');
            }
        }
    }


ну и добавил в rules

// username is validated
['username', 'validateUsername'],


Теперь если нажать при не правильно логине контролер перекидывает на site/login где под полем логин выводит ошибку что не правильный логин, ну и для пароля тоже самое

В общем надо чтобы контролер не перекидывал на страницу site/login а выдавал ошибку сразу в моделаьном окне.

Вот сам стандартный экшен Логина

public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        }
        else {
            $model->password = '';

            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }


Вот и думаю с чего начать и как правильно сделать рендер в else, хотя сам $model->login() выдает bool но как то же передается сюда ошибки валидации
return $this->render('login', [
                'model' => $model,
            ]);


Значит и можно отрендерит на модальное окно просто ошибку, как сделать? кто сталкивался?
  • Вопрос задан
  • 387 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 2
kimono
@kimono
Web developer
Вам нужна валидация на стороне клиента:
https://www.yiiframework.com/doc/guide/2.0/en/inpu...

, либо ajax-валдиация всей формы перед отправкой:
https://github.com/yiisoft/yii2/issues/1399#issuec...
Ответ написан
Как вариант. После неудачного входа вам нужно заново открыть модальную форму авторизации, но перед рендером формы (виджета) в модель LoginForm() нужно передать ошибки валидации.
Например:
$model->addError('username', 'Не верный логин пользователя');
return $this->render('login', [
                'model' => $model,
            ]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы