@mirvo

Почему не проходит валидацию?

Всем привет.

Есть метод:
send(options) {
    let data = new FormData();

    data.append('_csrf', this.csrfToken);

    for (let x in options['fields']) {
        if (options['fields'][x] !== null) {
            data.append(x, options['fields'][x]);
        }
    }
    axios({
        method: 'post',
        url: '/test',
        data: data,
    }).then((response) => {
        console.log(response);
    });
},


В options['fields'] хранится ключ status с boolean значением.
Но как я понял, FormData отправляет только строки.

На сервере поле не может пройти валидацию на целостное число (Yii2 валидация перед отправкой в DB), т.к. тип поля строковый ("true").

Примерно тоже самое происходит и с "null". Думал отрубить strict mode в DB, но это не самое лучшее решение.
Ставить фильтр в правилах валидации тоже не хочется.

Подскажите, что сделать?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
IgorPI
@IgorPI
А если так?
for (let x in options['fields']) {
        if (options['fields'][x] !== null) {
            data.append(x, options['fields'][x] ? 1 : 0);
        }
    }


for (let x in options['fields']) {
        if (options['fields'][x] !== null) {
            if (typeof options['fields'][x] == "boolean") {
               data.append(x, options['fields'][x] ? 1 : 0);
            } else {
                data.append(x, options['fields'][x]);
            }
        }
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
22 нояб. 2019, в 17:16
200 руб./за проект
22 нояб. 2019, в 17:09
6000 руб./за проект
22 нояб. 2019, в 16:37
10000 руб./за проект