Php yii2将值从视图传递到控制器

Php yii2将值从视图传递到控制器,php,jquery,yii2,Php,Jquery,Yii2,我有这种问题。我有一个输入文本,其中有收音机的模板 问题是,当我检查它并将其存储到数据库字段时,我希望获得该收音机的值 我的想法是从模型中创建一个变量,但在保存该变量时,我无法将无线电值传递给该变量 请帮帮我,我受不了了 以下是查看的图像: 控制器操作: public function actionCreate() { $model = new QbQuestion(); if ($model->load(Yii::$app->reques

我有这种问题。我有一个输入文本,其中有收音机的模板

问题是,当我检查它并将其存储到数据库字段时,我希望获得该收音机的值

我的想法是从模型中创建一个变量,但在保存该变量时,我无法将无线电值传递给该变量

请帮帮我,我受不了了

以下是查看的图像:

控制器操作:

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,
            ]);
        }
    }
视图:



属性未保存的原因是您没有将字段绑定到模型,因此表单中提交了不正确的字段名

在我看来,你需要的似乎是一名放射科医生。
Html::radio()
方法只添加了一个单选按钮,而不绑定到任何模型。要使用
放射科医生
,您需要这样做

首先,在视图文件中创建一组可能的答案

$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->field($model,'answerToQuestion')->radioList($answers)

Yii现在应该生成具有正确名称的单选按钮列表,以将它们绑定到您的模型中,并允许大量分配它们

表单提交的属性将是表单的属性(假设您的模型名为
问题

Question[answerToQuestion] => 'q_c2'

它将通过验证。现在由您的模型逻辑将所选答案解码到数据库中的相关字段中。

您使用的无线电字段将始终返回1,因此您无法识别所选答案。您可以按以下方式执行此操作:

表单文件中的更改:

<?= $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>',
    ]); ?>

你可以发布你的代码,而不仅仅是它的图像吗?图像会更好地插入到问题中!它会让事情更可读!Thnkssorry我是这个网站的新手。我的代码在该图像上是相同的。我试图从控制器创建以保存它,但它不起作用。我的控制器代码如下所示:public function actionCreate(){$model=newqbquestion();if($model->load(Yii::$app->request->post()){$answer=$model->answer;$model->save();return$this->redirect(Url::to(['qb-question/index']);}否则{return this->renderAjax('create',['model'=>$model,];}}}太好了!现在您只需复制并粘贴图像中的代码,即以
$form->field
开头的位。我希望我做得对,以向您展示解决我的问题所需的方法。谢谢:)你打算只选择一个单选按钮,还是可以选择多个单选按钮?你的字段
q_c1
q_c2
等的值是多少?谢谢你的回答。我明白你的意思。但作为我的设计,我需要像我发布的视图一样。你能帮我制定另一个解决方案,将我的收音机与我的模式绑定吗l使用这一行:甚至只是为了确定我是否选中了任何按钮。例如,如果我选中了q_c1中的按钮,那么我可以看到q_c1按钮已被选中。这样,我可以在控制器中创建一个条件:)谢谢。然后你需要将该字段更改为类似这样的内容;`Html::radio('ModelName['answer']),假设您的模型中有一个名为answer的属性,但我仍然不认为它会达到您想要的效果。现在您仍然可以像最初一样设置单选按钮的样式?Html::radio('ModelName['answer']))只能指定我的收音机的名称,但值仍然为1。我可以指定每个按钮的值,如q_c1的值为1 q_c2=2,依此类推。我不能按我想要的方式设置样式。^ ^谢谢you@top如果是这样的话,请参考我最初的答案!你是一个救生员,先生:)这就是我想要的。非常感谢你,可以吗也帮我解决这个问题:谢谢:)
<?= $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>',
    ]); ?>
 public function actionCreate()
    {
        $model = new QbQuestion();

        if ($model->load(Yii::$app->request->post())) {

          // if you have answer attribute in model class than load that attribute
          // no need of this line $answer = $model->answer;
          // no need of this line  $model->$answer;

          // you can do it manually as below
           $model->answer=$_REQEST['QbQuestion']['answer'];

            $model->save();
            return $this->redirect(Url::to(['qb-question/index']));
        } else {
            return $this->renderAjax('create', [
                'model' => $model,
            ]);
        }
    }