这里我有2个视图,第一个视图是一个让用户注册的表单。然后将信息保存到控制器中的DB并参考另一个视图。
我在第一个视图中写了一个复选框列表。
<?= $form->field($model, 'items[]')->checkboxList(['a' => 'Item A', 'b' => 'Item B', 'c' => 'Item C']); ?>
然后我尝试从控制器中获取它的值并保存到DB。
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
//save to DB
$model = new EntryForm();
$tableMember=new Members;
$tableMember->select=$model-> items ;
$tableMember->save();
return $this->render('entry-confirm', ['model' => $model]);
}
在entry-confirm.php中显示
<li><label>Selected</label>: <?php echo Html::encode($model->items['a']) ?></li>
但它是空的。
我使用NetBeans调试器,它显示:
$_POST = [
'_csrf' => 'OTFHYUpIaVJNSxAJPBEDGV8DcTYjAhojAFofVx0HJmULVCwoAiRENA==',
'EntryForm' => [
'username' => 'df',
'email' => '2@c.c',
'password' => '123',
'items' => [
'a',
'b',
],
'country' => '',
],
];
似乎物品确实获得了属性。有没有其他方法来创建复选框?或者我如何从复选框列表中获取值?
答案 0 :(得分:0)
尝试这种方式:
<?php
echo $form->checkBoxList($model,'items',
array('a' => 'Item A', 'b' => 'Item B', 'c' => 'Item C'),
);
?>
此复选框列表应该是Form Widget的一部分,而Items应该是您的数据库字段或类中的Variable。首先尝试检查您的模型字段是否出现在您的视图中。
答案 1 :(得分:0)
试试这个
double resultDouble = Convert.ToDouble(result);
$tableMember->select = implode(",", $model-> items);
返回已选中复选框的数组。
答案 2 :(得分:0)
好吧,我总是遇到像使用
之类的东西回到数组的问题 <input id="audio_file" type="file" accept="audio/*" />
(如来自例如checkboxlist的值),我发现更容易获取值,例如$model->items
,就像这样:
$_POST['EntryForm']['items']
(在控制器中完成$model->items=implode(',',$_POST['EntryForm']['items']);
之前)
作为一个例子:
(我们拆分帖子并保存动作)
$model->save()
$ model-&gt;项目不起作用的主要问题是它可能不被认为是“安全的”,这意味着它尚未在规则中的模型中声明(公共函数规则(),例如添加
if ($model->load(Yii::$app->request->post())) {
$model->items=implode(',',$_POST['EntryForm']['items']); //change items into string to be saved
if($model->save()){
return $this->redirect(['view', 'id' => $model->id]);
}
} else {
$model->items=explode(',',$model->items); //string to array to fill the checkboxlist
return $this->render('create', [
'model' => $model,
]);
}
或
[['items'], 'string', 'max' => 250],
应该做的伎俩......
另见:Yii2 - Models - Safe Attributes
HTH