Ajax ActiveForm не работает vlidate

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Ajax ActiveForm не работает vlidate

Сообщение frmaxm »

Добрый день,

Народ делаю аякс форму из простой работающей формы.
Без аякс все работает так как надо, как только делаю аякс форму перестает работать валидация.

Зама форма

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

$form = ActiveForm::begin([
    'id' => $model->formName(),
    'enableAjaxValidation' => true,
    'options' => [
        'enctype' => 'multipart/form-data',
        'class' => false,
    ],
    'errorCssClass' => 'hasError',
]); 
Контролеер

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

public function actionTest(){
        $model = new MyPersonalForm('', $user,  Yii::$app->request->post('myPersonals'));

        if(Yii::$app->request->isPost && $model->validate()){
            if($model->saveMyPersonal()){

            }
        }
            return $this->renderAjax('test', [
                'model' => $model,
            ]);
        
    } 
Проверяю в ответе приходит, отвалидируемая форма, как мне ее отобразить в аякс форме? Спасибо
Проверяю без аякса и попапа все работает как часы.
lenbord
Сообщения: 49
Зарегистрирован: 2016.01.12, 10:48
Контактная информация:

Re: Ajax ActiveForm не работает vlidate

Сообщение lenbord »

добавь в контроллер, если не проходит валидация модели, вот такой кусок кода:
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);

также не забудь в контроллере использовать
use yii\widgets\ActiveForm;
use yii\web\Response;
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Ajax ActiveForm не работает vlidate

Сообщение frmaxm »

lenbord писал(а):добавь в контроллер, если не проходит валидация модели, вот такой кусок кода:
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);

также не забудь в контроллере использовать
use yii\widgets\ActiveForm;
use yii\web\Response;
Я пробовал вернуть Active::validate() результат такой же
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Ajax ActiveForm не работает vlidate

Сообщение frmaxm »


))) я читал доку и там мне ничего не подошло валидация распределяется в

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

$model = new MyPersonalForm('', $user,  Yii::$app->request->post('myPersonals')); 

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

public function validate($attributes=null, $clearErrors=true){
        $return = parent::validate($attributes,$clearErrors);
        $skip_activity =false;

        foreach($this->my_personal as $ui)
        {
            if(!$ui->validate())
            {
                $this->addErrors($ui->getErrors());
                $return = false;
            }

            if($ui->is_active){
                $skip_activity =true;
            }
        }

        if(!$skip_activity){
            foreach($this->my_personal as $ui)
                $ui->addError('is_active','At least one activity must be selected or None.');
            $return = false;
        }

        return $return;
    }
lenbord
Сообщения: 49
Зарегистрирован: 2016.01.12, 10:48
Контактная информация:

Re: Ajax ActiveForm не работает vlidate

Сообщение lenbord »

$model = new MyPersonalForm('', $user, Yii::$app->request->post('myPersonals'));

откуда у тебя берется переменная $user?
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Ajax ActiveForm не работает vlidate

Сообщение frmaxm »

lenbord писал(а):$model = new MyPersonalForm('', $user, Yii::$app->request->post('myPersonals'));

откуда у тебя берется переменная $user?
user, написано для примера - просто чтоб показать где пеердаются данные из пост
lenbord
Сообщения: 49
Зарегистрирован: 2016.01.12, 10:48
Контактная информация:

Re: Ajax ActiveForm не работает vlidate

Сообщение lenbord »

frmaxm писал(а):
lenbord писал(а):$model = new MyPersonalForm('', $user, Yii::$app->request->post('myPersonals'));

откуда у тебя берется переменная $user?
user, написано для примера - просто чтоб показать где пеердаются данные из пост
а почему тебе не сделать вот так:
$model = new MyPersonalForm();

if ($model->load(Yii::$app->request->post())) {
// а тут все, как описано в доках
}
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Ajax ActiveForm не работает vlidate

Сообщение frmaxm »

А смысл тогда от формы? Там же инициализация, валидация, сохранение
lycifer3
Сообщения: 23
Зарегистрирован: 2016.03.24, 14:40

Re: Ajax ActiveForm не работает vlidate

Сообщение lycifer3 »

вот пример аякс валидации

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

if(Yii::$app->request->isAjax && Yii::$app->request->isPost) {
            if ($model->load(Yii::$app->request->post())) {
                if($model->validate()) {
                    if ($model->sendEmail()) {
                        Yii::$app->getSession()->setFlash('message', 'На ваш email отправлено писмо, проверте вашу почту');

                        return $this->goHome();
                    } else {
                        Yii::$app->getSession()->setFlash('message', 'Что то пошло не так, убедитесь в правельности введенного email');
                    }
                }else {
                    Yii::$app->response->format = Response::FORMAT_JSON;
                    return ActiveForm::validate($model);
                }
            }
        }
 
помоему все просто и понятно
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Ajax ActiveForm не работает vlidate

Сообщение frmaxm »

Я не говорю, что мне этот метод непонятен)

Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);


я говорю, что в моем случае он не помогает
lycifer3
Сообщения: 23
Зарегистрирован: 2016.03.24, 14:40

Re: Ajax ActiveForm не работает vlidate

Сообщение lycifer3 »

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

public function actionTest(){
        $model = new MyPersonalForm('', $user,  Yii::$app->request->post('myPersonals'));

        if(Yii::$app->request->isPost && $model->validate()){
            if($model->saveMyPersonal()){

            }
        }
            return $this->renderAjax('test', [
                'model' => $model,
            ]);
        
    } 
 
сделай по примеру что я написал,
а то ты сначала хочешь загрузить модель потом смотришь пришел ли пост, и сразу проверяешь валидна ли модель
а нужно загрузить модель и проверить ее через ActiveForm

вот моя форма

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

use yii\bootstrap\ActiveForm;

<?php $form = ActiveForm::begin([
            'action' => Url::to(['/site/password-reset-request']),
            'enableAjaxValidation' => true,
            'id'     => 'request-password-reset-form', 
            'class'  => 'form-registration'
        ]); ?>

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

$model->validate(); 
не делает аякс валидацию. это делает не посредственно ActiveForm
lenbord
Сообщения: 49
Зарегистрирован: 2016.01.12, 10:48
Контактная информация:

Re: Ajax ActiveForm не работает vlidate

Сообщение lenbord »

допиши в active form validationUrl
и создай экшен для валидации твоей формы
Ответить