Yii2 не выводит ошибку валидации через ajax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
AndyP
Сообщения: 5
Зарегистрирован: 2017.09.20, 18:01

Yii2 не выводит ошибку валидации через ajax

Сообщение AndyP »

Здравствуйте, я новичок в 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', то после перезагрузки страницы ошибка на месте. Подскажите как вывести эту ошибку без перезагрузки страницы???
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение urichalex »

А зачем ловите имя модели в запросе?

Код: Выделить всё

$model_reg = new \app\models\Predreg();
if($model->load(Yii::$app->getRequest()->post())) {
	if(Yii::$app->getRequest()->post('ajax') === 'registration-form') {
		return $this->asJson(ActiveForm::validate($model_reg));
	}
	if($model_reg->validate() && $model_reg->predreg()) {
		return $this->goHome();
	}
}
И в модели нет переопределения валидации?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение Dominus »

View:

Код: Выделить всё

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

Код: Выделить всё

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!');
}
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение urichalex »

Dominus писал(а): 2017.09.20, 21:57 View:

Код: Выделить всё

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

Код: Выделить всё

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!');
}
Как это относится к ошибке?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение Dominus »

AndyP писал(а): 2017.09.20, 18:04 Ошибка связанная с паролями работает верно, но не выводится ошибка неуникальности email адреса, если убираю свойство у формы 'enableAjaxValidation', то после перезагрузки страницы ошибка на месте. Подскажите как вывести эту ошибку без перезагрузки страницы???
Под ошибкой я понимаю что автор имеет ввиду возвращаемое сообщение при ошибке валидации атрибутов модели. Валидация должна работать без перезагрузки страницы, то есть ajax.
urichalex писал(а): 2017.09.20, 23:19 Как это относится к ошибке?
Это относится не к ошибке, а скорее к
Подскажите как вывести эту ошибку без перезагрузки страницы???
Я написал проверенный рабочий вариант.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение urichalex »

Dominus писал(а): 2017.09.21, 00:27
urichalex писал(а): 2017.09.20, 23:19 Как это относится к ошибке?
Это относится не к ошибке, а скорее к
Подскажите как вывести эту ошибку без перезагрузки страницы???
Я написал проверенный рабочий вариант.
И я написал проверенный рабочий вариант. Но, я считаю, что городить отдельное действие для аякс валидации это лишнее
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение Dominus »

urichalex писал(а): 2017.09.21, 00:51 И я написал проверенный рабочий вариант. Но, я считаю, что городить отдельное действие для аякс валидации это лишнее
А я так не считаю, всё на своих местах. Да и вообще это дело вкуса.)
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
AndyP
Сообщения: 5
Зарегистрирован: 2017.09.20, 18:01

Re: Yii2 не выводит ошибку валидации через ajax

Сообщение AndyP »

Спасибо огромное Dominus!! Его решение помогло!!!
Закрыто