从checkboxlist yii2中获取值

时间:2015-12-10 09:17:52

标签: php yii2

这里我有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' => '',
    ],
];

似乎物品确实获得了属性。有没有其他方法来创建复选框?或者我如何从复选框列表中获取值?

3 个答案:

答案 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