我有这种问题。我有一个输入文本,其中包含无线电模板。
问题是,当我检查它并将其存储到数据库字段时,我想获得该无线电的值。
我的想法是从模型创建一个变量,但是当我保存它时,我无法将无线电值传递给该变量。
请帮帮我,我被困住了。
这是视图的图像:
控制器操作:
public function actionCreate()
{
$model = new QbQuestion();
if ($model->load(Yii::$app->request->post())) {
$answer = $model->answer;
$model->$answer;
$model->save();
return $this->redirect(Url::to(['qb-question/index']));
} else {
return $this->renderAjax('create', [
'model' => $model,
]);
}
}
查看:
<div class="qb-question-form">
<?php $form = ActiveForm::begin([
'layout' => 'horizontal',
'fieldConfig' => [
'horizontalCssClasses' => [
'label' => 'col-sm-4',
'offset' => 'col-sm-offset-4',
'wrapper' => 'col-sm-8',
'button' => 'col-sm-8',
'error' => '',
'hint' => '',
],
],
]); ?>
<?php echo $form->errorSummary($model); ?>
<?= $form->field($model, 'q_cat')->dropDownList(
ArrayHelper::map(QbCategory::find()->all(), 'id', 'category'),
[
'prompt' => 'Select Category'
]) ?>
<?= $form->field($model, 'q_date')->dropDownList(
ArrayHelper::map(QbDate::find()->asArray()->all(), 'id',
function($model, $defaultValue) {
return $model['month'].' '.$model['year'];
}),
[
'prompt' => 'Select Date'
]) ?>
<?php echo $form->field($model, 'question')->textarea(['rows' => 5]) ?>
<?= $form->field($model, 'q_c1', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
Html::radio('answer').'</span>{input}</div>',
]); ?>
<?= $form->field($model, 'q_c2', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
Html::radio('answer').'</span>{input}</div>',
]); ?>
<?= $form->field($model, 'q_c3', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
Html::radio('answer').'</span>{input}</div>',
]); ?>
<?= $form->field($model, 'q_c4', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
Html::radio('answer').'</span>{input}</div>',
]); ?>
<?php echo Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
</div>
提前感谢。
答案 0 :(得分:1)
更改表单文件:
$.ajax
({
url: '/api/TaskApi/',
type: 'POST',
data: Json.stringyfy(model),
dataType: "json",
success: function(data) {
alert('Task Added');
// location.reload(); // this is not a good practice
},
error: function() { alert('Task not Added'); }
});
此处,<?= $form->field($model, 'q_c1', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
'<input type="radio" name="QbQuestion[answer]" value="q_c1">'.'</span>{input}</div>',
]); ?>
<?= $form->field($model, 'q_c2', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
'<input type="radio" name="QbQuestion[answer]" value="q_c2">'.'</span>{input}</div>',
]); ?>
<?= $form->field($model, 'q_c3', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
'<input type="radio" name="QbQuestion[answer]" value="q_c3">'.'</span>{input}</div>',
]); ?>
<?= $form->field($model, 'q_c4', [
'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'.
'<input type="radio" name="QbQuestion[answer]" value="q_c4">'.'</span>{input}</div>',
]); ?>
会返回您选择的答案。
控制器更改:
QbQuestion['answer']
答案 1 :(得分:0)
您的属性未保存的原因是您没有将字段绑定到模型,因此表单中提交的字段名称不正确。
在我看来,你需要的是radioList
。 Html::radio()
方法只添加一个单选按钮,不依赖于任何模型。要使用radioList
,您需要执行以下操作;
首先,在视图文件中创建一系列可能的答案;
$answers = array('q_c1' => $model->q_c1, 'q_c2' => $model=>q_c2, 'q_c3' => $model=>q_c3, 'q_c4' => $model=>q_c4);
现在,因为它是一个收音机列表,它只会提交一个单选按钮的数据。它不允许选择多个单选按钮。由于存储数据的方式,在模型填充和验证时,您需要一个临时模型属性来存储此值。像这样在你的模型中创建它;
public $answerToQuestion;
允许大量分配;
public function rules() {
return [
[['answerToQuestion'], 'safe]
];
}
现在您可以像这样创建表单字段;
echo $ form-&gt; field($ model,'answerToQuestion') - &gt; radioList($ answers);
Yii现在应该生成具有正确名称的单选按钮列表,以将它们绑定到您的模型中并允许它们被大量分配。
表单提交的属性将采用表单形式(假设您的模型名为Question
;
Question[answerToQuestion] => 'q_c2'
它将通过验证。现在由模型逻辑决定将所选答案解码到数据库的相关字段中。