Форме данные сами сохраняются, не успев нажать на button?

В модальном окне регистрационная форма заполняю ее и еще не успев нажать на кнопку, она уже летит на сохранения, а когда нажимаю кнопку то пишет Эта почта уже занята, короче говоря, зарегистрированный....

Как сделать что бы регистрация происходила после того как нажали на кнопку и после если все okто форма закрывалась и выскакивала
Yii::$app->session->setFlash('success', 'Письмо с активацией отправлено на емайл <strong>' . Html::encode($user->email) . '</strong> (проверьте папку спам).');


c1bbda9b41cb43b1a10a4c66df7a0f77.png

form
<?php $form = ActiveForm::begin([
    'id' => 'reg-form',
    'enableAjaxValidation' => true,
]); ?>


<?= $form->field($model, 'name')->textInput() ?>
<?= $form->field($model, 'surname')->textInput() ?>
<?= $form->field($model, 'email')->textInput() ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'password_repeat')->passwordInput() ?>


<?= Html::submitButton('Зарегистрироваться') ?>

<?php ActiveForm::end(); ?>


controller
public function actionSignUp()
    {
        $emailActivation = Yii::$app->params['emailActivation'];
        $model = $emailActivation ? new Signup(['scenario' => 'emailActivation']) : new Signup();

        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post()) && $model->validate()) {

            if ($user = $model->signup()) {
                if ($user->status === User::STATUS_ACTIVE) {
                    if (Yii::$app->getUser()->login($user)) {
                        return $this->goHome();
                    }
                } else {
                    if ($model->sendActivationEmail($user)) {
                        Yii::$app->response->format = Response::FORMAT_JSON;
                        Yii::$app->session->setFlash('success', 'Письмо с активацией отправлено на емайл <strong>' . Html::encode($user->email) . '</strong> (проверьте папку спам).');
                        return ActiveForm::validate($model);
                    } else {
                        Yii::$app->session->setFlash('error', 'Ошибка. Письмо не отправлено.');
                        Yii::error('Ошибка отправки письма.');
                    }
                }
            } else {
                Yii::$app->session->setFlash('error', 'Возникла ошибка при регистрации.');
                Yii::error('Ошибка при регистрации');
                return $this->refresh();
            }
        }

        return $this->renderAjax('sign-up', ['model' => $model]);
    }
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Доброй ночи.
Уберите 'enableAjaxValidation' => true
Перенесите в модель && $model->validate()
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
enableAjaxValidation => true
Валидация через ajax, так что не удивительно, но можно ее настроить на submit
'enableAjaxValidation' => true,
'validateOnBlur' => false,
'validateOnChange' => false,
'validateOnType' => false,
'validateOnSubmit' => true,

Это и другие плюшки есть в доках: www.yiiframework.com/doc-2.0/yii-widgets-activefor...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы