使用多项选择答案在 Yii2 中创建调查表
Create survey form in Yii2 with multiple choice answers
我是 Yii 的新手,非常感谢任何帮助。
我需要创建一个包含多项选择投票的页面。我的模型如下所示:
投票问题:
id int
title varchar
投票回答
id char //one letter - answer option
title
question_id //FK pool_question(id)
投票结果
user_id int
question_id int //FK poll_question(id)
answers //will be stored like A,B,C
indicated_answer //alternaive answer specified by user
示例问题如下:
What do you think about us?
(checkbox)A. Good
(checkbox)B.Bad
(checkbox)C.Other (indicate) (textbox goes here)
我不确定我是否做对了,我的控制器:
public function actionSurvey($user_id)
{
$model = [new PollResult];
foreach($model as $model_item){
$model_item->user_id= $user_id;
if ($model_item->load(Yii::$app->request->post())) {
//only one item received, why??
}
}
return $this->render('survey', ['model' => $model]);
}
查看:
<?php $form = ActiveForm::begin(); ?>
<?php foreach(PollQuestion::find()->all() as $question) {?>
<?php foreach($model as $model_item) { ?>
<p><?=$question->title?></p>
<?= Html::activeHiddenInput($model_item , "user_id"); ?>
<?= $form->field($model_item, 'answers')->checkboxList(ArrayHelper::map($question->pollAnswers, 'id', 'title')?>
<?= $form->field($model_item, 'indicated_answer') ->textInput()?>
<?php } }?>
<div class="form-group">
<?= Html::submitButton(Yii::t('app', 'Send'), ['class' => 'btn btn-success' ]) ?> </div>
<?php ActiveForm::end(); ?>
问题是在控制器中我只收到数组中的一项。我不确定我做错了什么。
返回一个模型条目是正确的。在您的表单中,您正在创建一个模型并将其传递给表单。
public function actionSurvey($user_id)
{
$model = [new PollResult];
// ...
return $this->render('survey', ['model' => $model]);
}
然后您可以期待返回一个模型。
查看此相关问题,了解如何解决此问题。
我的建议是,您需要一个额外的表单模型来执行此操作。
您可以在 http://www.yiiframework.com/doc-2.0/guide-input-forms.html.
上查看如何创建表单模型
您创建的表单模型至少具有以下属性:
- 答案[]
- indicated_answer[]
并且您可以将用户的输入保存到该属性并将它们保存到您的 ActiveRecord 模型中。
我是 Yii 的新手,非常感谢任何帮助。 我需要创建一个包含多项选择投票的页面。我的模型如下所示:
投票问题:
id int
title varchar
投票回答
id char //one letter - answer option
title
question_id //FK pool_question(id)
投票结果
user_id int
question_id int //FK poll_question(id)
answers //will be stored like A,B,C
indicated_answer //alternaive answer specified by user
示例问题如下:
What do you think about us?
(checkbox)A. Good
(checkbox)B.Bad
(checkbox)C.Other (indicate) (textbox goes here)
我不确定我是否做对了,我的控制器:
public function actionSurvey($user_id)
{
$model = [new PollResult];
foreach($model as $model_item){
$model_item->user_id= $user_id;
if ($model_item->load(Yii::$app->request->post())) {
//only one item received, why??
}
}
return $this->render('survey', ['model' => $model]);
}
查看:
<?php $form = ActiveForm::begin(); ?>
<?php foreach(PollQuestion::find()->all() as $question) {?>
<?php foreach($model as $model_item) { ?>
<p><?=$question->title?></p>
<?= Html::activeHiddenInput($model_item , "user_id"); ?>
<?= $form->field($model_item, 'answers')->checkboxList(ArrayHelper::map($question->pollAnswers, 'id', 'title')?>
<?= $form->field($model_item, 'indicated_answer') ->textInput()?>
<?php } }?>
<div class="form-group">
<?= Html::submitButton(Yii::t('app', 'Send'), ['class' => 'btn btn-success' ]) ?> </div>
<?php ActiveForm::end(); ?>
问题是在控制器中我只收到数组中的一项。我不确定我做错了什么。
返回一个模型条目是正确的。在您的表单中,您正在创建一个模型并将其传递给表单。
public function actionSurvey($user_id)
{
$model = [new PollResult];
// ...
return $this->render('survey', ['model' => $model]);
}
然后您可以期待返回一个模型。
查看此相关问题,了解如何解决此问题。
我的建议是,您需要一个额外的表单模型来执行此操作。 您可以在 http://www.yiiframework.com/doc-2.0/guide-input-forms.html.
上查看如何创建表单模型您创建的表单模型至少具有以下属性:
- 答案[]
- indicated_answer[]
并且您可以将用户的输入保存到该属性并将它们保存到您的 ActiveRecord 模型中。