Как провести вализацию форму с динамическими загруженными radioList'ами?

Как провалидировать динамически загруженные радиолисты? Т.е. не определенное количество, которое зависит от количества записей в бд.

Вроде-бы, что-то сделал, но валидация не проходит + radioList'ы работают словно он 1 большой ... тоесть чекнутый итем перебегает с одного radioList на другой

models/TestForm.php
<?php

namespace frontend\models;

use yii\base\Model;

class TestForm extends Model
{
    public $radioButtonList = [];

    public function rules()
    {
        return [
            ['radioButtonList', 'each', 'rule' => ['required']],
        ];
    }

}


controllers/TestController
public function actionView($test_id)
    {
       ...

        $testForm = new TestForm();
        if ($testForm->load(Yii::$app->request->post())) {
            if ($testForm->validate()) {
                var_dump($testForm);
            }
            else {
                return 0;
            }
        }

        ...

        return $this->render('view', [
            ...
            'testForm' => $testForm,
            ...
        ]);
    }


views/test/view
<?php

/* @var $this yii\web\View */
/* @var $model common\models\Test */
/* @var $dataProvider yii\data\ActiveDataProvider */

use common\models\Answer;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\widgets\ActiveForm;

?>
<h1><?= Html::encode($this->title) ?></h1>
<div class="test-view">
    <?php $form = ActiveForm::begin(); ?>

    <? for ($i = 0; $i < count($testQuestions); $i++) : ?>
        <section class="question-<? echo $i+1 ?>">
            <h3><? echo $testQuestions[$i]->question; ?></h3>

            <?=
             $form->field($testForm, 'radioButtonList')
                ->radioList(ArrayHelper::map(
                    Answer::find()->where(['question_id' => $testQuestions[$i]->id])->all(),
                    'id',
                    'value'
                ));
            ?>
        </section>
    <? endfor; ?>
    <div class="form-group">
        <?= Html::submitButton('Закончить тест', ['class' => 'btn btn-success']) ?>
    </div>

    <?php ActiveForm::end(); ?>
</div>
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Для работы с динамическими формами лучше используйте Dynamic Model, она избавляет от множества проблем и вопросов
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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