Отправка формы ajax и её валидация на сервере

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

Отправка формы ajax и её валидация на сервере

Сообщение fenzom » 2019.11.30, 23:00

Доброго времени суток.
Прошу помощи над такой проблемой: отправляю на сервер форму с помощью ajax, форма отправляется, но не проходит валидацию на сервере.
Сам js код:

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

 $(document).on('click', '#for', function (e) {
        e.preventDefault();
        let type = $(this).data('type');
        let forgoData = $('#' + type).serialize();

        $.ajax({
            url: '/',
            type: 'POST',
            data: {
                'method': type,
                'forgoData': forgoData
            },
            success: function (res) {
                console.log(res);
            },

            error: function (jqXHR, textStatus, errorThrown) {
            
        });
        return false;
    });
Таким образом обрабатываю запрос на сервере:

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

  if (Yii::$app->request->isAjax) {

     $login= new Login();
        if($login->load(\Yii::$app->request->post('forgoData')) && $login->validate()) {
            return 'ok';
        } else {
            return \yii\widgets\ActiveForm::validate($guest);
        }
            }
Правила модели:

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

    public function rules()
    {
        return [
            [['name', 'email', 'telephone'], 'required']
        ];
    }
Вывод Yii::$app->regust->post('forgoData') перед валидацией

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

"_csrf-frontend=QGi8bXktKjpNS_4zFT3NqIl7657wWeQZEf7d4oMVspV5O48GLlVgaB9mrQF5cZ7nxkybxqcqyS1Tq-6q4Hz55g%3D%3D&PaymentGuest%5Bname%5D=login&PaymentGuest%5Bemail%5D=test%40local.ru&PaymentGuest%5Btelephone%5D=4444545"

yiiliveext
Сообщения: 536
Зарегистрирован: 2019.08.13, 01:49

Re: Отправка формы ajax и её валидация на сервере

Сообщение yiiliveext » 2019.12.01, 10:18

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

Yii::$app->response->format = Response::FORMAT_JSON;
return \yii\widgets\ActiveForm::validate($login);

fenzom
Сообщения: 8
Зарегистрирован: 2019.02.15, 18:36

Re: Отправка формы ajax и её валидация на сервере

Сообщение fenzom » 2019.12.01, 22:32

yiiliveext писал(а):
2019.12.01, 10:18

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

Yii::$app->response->format = Response::FORMAT_JSON;
return \yii\widgets\ActiveForm::validate($login);
За указанную ошибку спасибо! Но к сожалению форма все равно не проходит проверку валидации, выводит ошибки:
["Необходимо заполнить «Email-адрес»."]
["Необходимо заполнить «Имя»."]
["Необходимо заполнить «Телефон»."]

yiiliveext
Сообщения: 536
Зарегистрирован: 2019.08.13, 01:49

Re: Отправка формы ajax и её валидация на сервере

Сообщение yiiliveext » 2019.12.02, 09:40

Вы передаете модель PaymentGuest, ее же должны и валидировать.
Либо загружайте c указанием имени формы $login->load(\Yii::$app->request->post('forgoData'), 'PaymentGuest')

Ответить