@AndyDino

Ajax валидация на Yii2. Почему не выводится ошибка валидации на уникальность поля?

Здравствуйте, я новичок в Yii2 и в программирование тоже. Делаю форму регистрации, мне нужно выполнить проверку на уникальность email без перезагрузки страницы делаю так: view:

<?php $form = ActiveForm::begin(['id' => 'registration-form', 'enableAjaxValidation' => true]); ?>
    <div class="form-group">
        <label for="email-pop-up">E-mail</label> 
        <?= $form->field($model_reg, 'email')->textInput()->label(false);  ?>
    </div>
    <div class="form-group">
        <label for="password-pop-up-1">Пароль</label> 
        <?= yii\helpers\Html::activePasswordInput($model_reg, 'password', ['class' => 'form-control']); ?>
    </div>
    <div class="form-group">
        <label for="password-pop-up-2">Повторить пароль</label>  
        <?= yii\helpers\Html::activePasswordInput($model_reg, 'password_repeat', ['class' => 'form-control']); ?>
    </div>


Правила в модели:

public function rules(){
    return [
        [['email',  'password', 'password_repeat'],'required'],
        ['email', 'email'],
        ['email', 'unique', 'targetClass'=>'app\models\Person'], 
        ['password', 'compare', 'compareAttribute' => 'password_repeat'],

    ];
}


Контроллер:
$model_reg = new \app\models\Predreg();

    if (Yii::$app->request->isAjax && $model_reg->load(Yii::$app->request->post('Predreg'))) {
        Yii::$app->response->format = Response::FORMAT_JSON;    
        return ActiveForm::validate($model_reg);
        Yii::$app->end();
    } 

    if (Yii::$app->request->post('Predreg')) {
        $model_reg->attributes = Yii::$app->request->post('Predreg');
        if ($model_reg->validate()){
            if ($model_reg->predreg()){

               return \yii\helpers\Url::home();

            } 
        }
    }


Ошибка связанная с паролями работает верно, но не выводится ошибка неуникальности email адреса, если убираю свойство у формы 'enableAjaxValidation', то после перезагрузки страницы ошибка на месте. Подскажите как вывести эту ошибку без перезагрузки страницы???
  • Вопрос задан
  • 1792 просмотра
Решения вопроса 1
@AndyDino Автор вопроса
На форуме yiiframework.ru подсказали, для того, чтобы ошибка отображалась нужно в форме добавить validationUrl

<?php $form = ActiveForm::begin([
	    'id' => 'registration-form',
	    'enableAjaxValidation' => true,
	    'validationUrl' => \yii\helpers\Url::to(['validate-form']), // Добавить URL валидации
    ]); ?>


а в контроллере добавить

public function actionValidateForm() 
    {
        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

            $model = new \app\models\Predreg();
            if($model->load(Yii::$app->request->post()))
                return \yii\widgets\ActiveForm::validate($model);
        }
        throw new \yii\web\BadRequestHttpException('Bad request!');
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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