2 回答
TA贡献1818条经验 获得超8个赞
您收到未定义变量错误,因为您没有将变量$form从主视图传递到_answers.php. 你可以这样传递:
<?php $form = ActiveForm::begin([
'enableClientValidation' => false,
'enableAjaxValidation' => true,]) ?>
<?= ListView::widget([
'layout' => '<div class="pull-left">{items}</div>',
'dataProvider' => $dataProvider,
'itemView' => function ($model, $key, $index, $widget) use ($form) {
return $this->render('_answers',[
'form' => $form,
'model' => $model,
'index' => $index,
]);
},
]); ?><div class="form-group">
<?php echo Html::submitButton('<span class="fa fa-plus"></span>'.' '.Yii::t('backend', 'Send') , ['class' => 'btn btn-primary']) ?>
至于如何发送带有问题 id 的多个答案,您可以使用vvpanchev 的答案中提到的方式或添加带有问题 id 的隐藏字段。带有隐藏字段的视图_answers.php:
<td width="5%" class="vcenter" rowspan="3">
<span class="panel-title-address"><label class="control-label">Nr: <?php echo ($index+1); ?></label></span>
</td>
<td width="95%" class="vcenter">
<div class="form-group field-qquestion-0-title required">
<label class="control-label" for="qquestion-type_id"><?= Yii::t('backend', 'Question'.' : ')?></label>
</div>
<div class="form-group field-qquestion-0-title required">
<label class="control-label" for="qquestion-type_id"><?= $model->question ?></label>
</div>
<div class="col-md-4">
<?php
//set the question's id to answer model if you haven't done that already
$answer->question_id = $model->id;
//output the hidden input with question id
echo \yii\helpers\Html::activeHiddenInput($answer, "[$index]question_id");
?>
<?php echo $form->field($answer, "[$index]answer")->textInput(['maxlength' => true]) ?>
</div>
</td>
如果您使用隐藏字段方法,那么在控制器中您可以使用\yii\base\Model::loadMultiple()方法将数据加载到答案模型中。您还可以用于\yii\base\Model::validateMultiple()验证。我假设答案模型类的名称是Answer.
$count = count(\Yii::$app->request->post('Answer', []));
$answers = [];
for ($i = 0; $i < $count; $i++) {
$answers[] = new Answer();
}
if (
\yii\base\Model::loadMultiple($answers, \Yii::$app->request->post())
&& \yii\base\Model::validateMultiple($answers)
) {
// ... save your answers and/or do other things needed
}
TA贡献1804条经验 获得超3个赞
像这样更改您的答案输入,您将获得每个问题的答案输入:
<?php echo $form->field($answer, '['.$model->id.']answer')->textInput(['maxlength' => true]) ?>
当您提交表格时,它将连同所有问题的答案一起提交。所以你可以像这样检查并保存$_POST:
if(isset($_POST['Answer']) and !empty($_POST['Answer'])){
foreach($_POST['Answer'] as $question_id => $answer){
//save your answer to your question
}
}
你也必须像这样改变你的ajaxvalidation foreach
添加回答
举报