在Yii中保存复选框值

时间:2011-06-02 19:01:33

标签: yii

我无法弄清楚如何在Yii中正确保存复选框值。我有一个MySQL列active,定义为tinyint。我有以下表单创建代码,如果值为1则正确显示复选框为已选中,如果为0则未选中;

    <?php echo $form->labelEx($model,'active'); ?>
    <?php echo $form->checkBox($model,'active'); ?>
    <?php echo $form->error($model,'active'); ?>

正确保存表单的代码会更改其他基于文本的值:

public function actionUpdate($id)
{
    $model=$this->loadModel($id);

    if(isset($_POST['Thing']))
    {
        $model->attributes=$_POST['Thing'];
        if($model->save())
            $this->redirect(array('thing/index'));
    }

    $this->render('update',array(
        'model'=>$model,
    ));
}

未保存active的值。我哪里错了?

10 个答案:

答案 0 :(得分:20)

您可以使用htmlOptions数组指定value属性。下面是代码示例:

<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active', array('value'=>1, 'uncheckValue'=>0)); ?>
<?php echo $form->error($model,'active'); ?>
  

从版本1.0.2开始,名为'uncheckValue'的特殊选项是   可用,可用于指定返回时的值   未选中复选框。默认情况下,此值为“0”。   (本文取自YII文件)

答案 1 :(得分:16)

对于您要从用户接受的每个输入,您需要在model :: rule()中定义它。在rule()中定义的是活动的吗?

答案 2 :(得分:6)

通常,如果您在保存到数据库时遇到问题,我会替换

$model->save();

if($model->save() == false) var_dump($model->errors);
通过这种方式,你可以确切地看到它为什么没有保存。它通常是验证错误。

答案 3 :(得分:6)

请关注:  1.在protected / models / Thing.php中添加active作为数字

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('active', 'numerical', 'integerOnly'=>true),
            //OR optional 
            array('active', 'safe'),
    );
}

控制器动作:确定

查看:

<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active', array('value'=>1, 'uncheckValue'=>0)); ?>
<?php echo $form->error($model,'active'); ?>

希望这对你有用......

答案 4 :(得分:2)

在确定如何处理布尔值时可以提供帮助的文章。 Yii中的复选框

http://www.larryullman.com/2010/07/25/handling-checkboxes-in-yii-with-non-boolean-values/

答案 5 :(得分:1)

我在我的数据库中使用了一个位类型字段但它没有用。

1.- I changed the field type to tinyint
2.- In the rules function added:
    array('active','numerical'),
3.-In the form (as D3K said) do: 
    <?echo $form->checkBox($model,'active',array('value'=>1, 'uncheckValue'=>0));?> 

答案 6 :(得分:0)

您可以打印所有正在捕获的属性进行检查。如果未捕获活动,则必须不安全。您需要将变量声明为安全或定义围绕该变量的规则。这将使变量安全。

答案 7 :(得分:0)

我之前有类似的问题,我更改数据类型是int,所以保存

答案 8 :(得分:0)

我们还可以在safe中添加model规则,以便将值从form传递到controller,而不会错过。

array('active', 'safe'),

答案 9 :(得分:0)

这篇文章太老了,但是我发现一种解决方案非常有用,它特别适用于为复选框指定值而不是数字。新语法是这样的 注意我正在使用ActiveForm

field($ model3,'External_Catering')-> checkbox(['id'=>'remember-me-ver','custom'=> true,'value'=>“ External_Catering”,'uncheckValue'=>“ vide “])?>

1)我的模型是=> model3

2)名称为External_Catering

3)取值为External_Catering,当值为uncheckValue时为空

4)在Controller中,只需指定模型及其属性即可获得值 $ External_Catering = $ model3-> External_Catering。