Yii, Зацикливание полей формы для табличного ввода

Я использую Yii Framework 1.1.17 и создал три модели: Question, AnswerOption и Response.

Отношения:

Table: Question (list of questions)
  id
  text

Table: AnswerOption (list of possible answers, associated with question)
  id
  question_id
  text

Table: Response (question and selected answer collector)
  id
  question_id
  answer_option_id
  text

Я пытаюсь создать форму и, по общему признанию, собрать ответы на все возможные вопросы.

Файл: ResponseController

public function actionCreate()
{
    // load all questions and with it the possible answer Options
    $questions = Question::model()->findAll();

    // get number of questions
    $count = Question::Model()->count();

    $model = array();
    $i = 1;

    while ($i <= $count) {
        $model[] = Response::model();
        $i++;
    }

    if (isset($_POST['Response'])) {
        // 
   }

    $this->render('create', array(
        'model' => $model,
        'questions' => $questions,
    ));
}

Это область, с которой у меня проблемы:

Файл: ответ/_form

<?php foreach($questions as $i=>$question): ?>

    <?php echo CHtml::activehiddenField($question,"[$i]id"); ?> <?php echo $question['text']; ?>

        <?php $options = CHtml::listData($question->answerOptions, 'id', 'text');?>

        <?php echo CHtml::activeDropDownList(AnswerOption::model(), "[$i]text", $options, array('empty' => 'Select answer...')); ?>

<?php endforeach; ?>

Возможно, я заполнил свои вопросы и возможные ответы, но мне нужно проверить и сохранить результаты в $model.

Кажется, я не могу найти способ эффективно решить эту проблему. Может кто-нибудь, пожалуйста, направьте меня?


person Glicious    schedule 25.02.2016    source источник


Ответы (1)


Мне удалось решить проблему с «петлей»:

Файл: ответ/_form

<?php $questions = Question::model()->findAll(); ?> 
<?php foreach ($questions as $j=>$question): ?>

    <div class="row">
        <?php echo $form->labelEx($model["$j"], "[$j]question_id"); ?>
        <?php echo $form->hiddenField($model["$j"], "[$j]question_id", array('value' => $question["id"])); ?>
        <?php echo $question['text']; ?>
    </div>

    <div class="row">
        <?php $options = CHtml::listData($question->answerOptions, 'id', 'text');?>
        <?php echo $form->labelEx($model["$j"], "[$j]answer_option_id"); ?>
        <?php echo $form->dropDownList($model["$j"], "[$j]answer_option_id", $options, array('empty' => 'Select answer...')); ?>
    </div>

<?php endforeach; ?>

Надеюсь, когда-нибудь это кому-нибудь пригодится.

person Glicious    schedule 26.02.2016