butteff
@butteff
Раз в тысячу лет заправляю свитер в носки

Почему поля, которые соответствуют правилам валидации, не проходят ее в yii2? Что я делаю не так?

Есть форма, большинство полей коорой генерируется на фронтенде. Форма эта содержит в себе генератор опросника. Люди пишут вопрос, выбирают тип вопроса (инпут это или радиокнопки\чекбоксы), если второе\третье, то появляются варианты ответов, которые люди могут добавить сколько угодно много. Сами вопросы тоже могут добавляться сколько угодно много.
Это я делаю с помощью jquery.

Поля формы я генерирую как массив, и обрабатывать их планирую тоже также.
echo $form->field($model, 'answer[]')->label('Answer:');


Но вот столкнулся я с проблемой. Почему-то не проходит валидация. Хотя данные получены верные. Вот результат var_dump($model), его часть, который я вывел на экран по условию, если валидация не прошла:

["question"]=>
array(1) {
[0]=>
string(9) "Question?"
}
["q_type"]=>
array(1) {
[0]=>
string(1) "2"
}
["answer"]=>
array(2) {
[0]=>
string(3) "One"
[1]=>
string(3) "Two"
}
["_errors":"yii\base\Model":private]=>
array(4) {
["captcha"]=>
array(1) {
[0]=>
string(35) "The verification code is incorrect."
}
["question"]=>
array(1) {
[0]=>
string(43) "Question must to have from 0 to 128 symbols"
}
["q_type"]=>
array(1) {
[0]=>
string(26) "Q Type must be an integer."
}
["answer"]=>
array(1) {
[0]=>
string(41) "Answers must to have from 0 to 64 symbols"
}
}


Т.е. видно, что данные получены, и они подходят под правила валидации, однако, возвращена ошибка и не одна.

А вот сама модель, также часть ее, правила валидации этих полей в rules():
['question', 'string', 'length' => [0,128], 'message' => 'Question must to have from 0 to 128 symbols'],
			['q_type', 'integer'],
			['answer', 'string', 'length' => [0,64], 'message' => 'Answers must to have from 0 to 64 symbols'],
			['if_question', 'boolean'],

Почему происходит такая ошибка? При этом это происходит даже для единственного вопроса, который есть изначально, т.е. без генерации дополнительных на фронтенде. Выходит, мой js не виноват. Тогда в чем ошибка у меня и Почему?

P.S. Я менял q_type на string - все равно ошибка.
  • Вопрос задан
  • 520 просмотров
Решения вопроса 1
@bIbI4k0
Питоню
Лучше покажите вьюшку формы, и что уходит на сервер. (Скрин firebug', например).

В var_dump'е у вас ругань на неверную капчу и неверную длину вопроса и ответа.
Непонятно, почему вы ответ проверяете, как строку, ведь это должен быть массив, судя по тому, как вы генерируете поле.
А вы учитываете, что при генерации вопроса на фронтэнде, необходимо и вопросы генерировать как массив:
question[0][answer][0]
question[0][answer][1]
question[1][answer][0]
question[1][answer][1]
А затем и обрабатывать соответственно? :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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