在Yii中保存复选框值

Mat*_*pel 14 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'); ?>
Run Code Online (Sandbox Code Playgroud)

并且保存表单的代码正确地更改了其他基于文本的值:

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,
    ));
}
Run Code Online (Sandbox Code Playgroud)

active未保存.我哪里错了?

D3 *_*3 K 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'); ?>
Run Code Online (Sandbox Code Playgroud)

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


小智 16

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

  • 实际上,如果你只是在规则中将它定义为integerOnly,那么yii足够聪明,知道它必须将bool转换为int,并且复选框代码位足够聪明,可以理解0和1的含义(实际上是在PHP中) ,任何整数都可以用作bool) (2认同)

Nei*_*gan 6

一般情况下,如果您在保存到数据库时遇到问题,我会替换

$model->save();
Run Code Online (Sandbox Code Playgroud)

if($model->save() == false) var_dump($model->errors);
Run Code Online (Sandbox Code Playgroud)

这样,你就可以清楚地看到为什么它没有保存.它通常是验证错误.


小智 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'),
    );
}
Run Code Online (Sandbox Code Playgroud)

控制器动作:没问题

视图:

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

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