在Yii中保存复选框值

在Yii中保存复选框值,yii,Yii,我不知道如何在Yii中正确保存复选框值。我有一个MySQL列,active,定义为tinyint。我有以下表单创建代码,如果值为1,则复选框正确显示为选中,如果值为0,则复选框正确显示为未选中: <?php echo $form->labelEx($model,'active'); ?> <?php echo $form->checkBox($model,'active'); ?> <?php echo $form->err

我不知道如何在Yii中正确保存复选框值。我有一个MySQL列,
active
,定义为
tinyint
。我有以下表单创建代码,如果值为1,则复选框正确显示为选中,如果值为0,则复选框正确显示为未选中:

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

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

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

$model->save();


这样,您就可以确切地了解为什么它没有保存。这通常是一个验证错误

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

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

<?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文件)


这篇文章在了解如何在Yii中处理布尔值和复选框时很有帮助

请按照以下步骤操作: 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'); ?>


希望这对您有用…

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

我在数据库中使用了位类型字段,但它不起作用

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));?> 
1.-我将字段类型更改为tinyint
2.-在规则功能中添加:
数组('活动','数字'),
3.-在表格(如D3K所述)中:

我以前也有类似的问题,我更改了数据类型为int,因此它保存了我们还可以在
模型中添加一个规则作为
安全
,将值从
表单
传递到
控制器
,而不丢失

array('active', 'safe'),

这篇文章很老了,但我发现了一个非常有用的解决方案,特别是给复选框指定一个值,而不是一个数字。新语法是这样的 注意,我使用的是ActiveForm

字段($model3,'External_Catering')->复选框(['id'=>'记住我的版本','custom'=>true,'value'=>“External_Catering”,'uncheckValue'=>“vide”])?> 1) 我的模型在哪里=>model3

2) 名为“外部餐饮”

3) 当值为未选中值时,该值为空

4) 在控制器中,只需指定模型及其属性即可获得值,如
  $外部餐饮=$model3->外部餐饮。

您看到的错误是什么?在
$model->attributes=$\u POST['Thing']之后,$model->active的值是多少?当前与活动字段关联的验证器是什么(请参见规则()函数)?您是否尝试过使用Gii自动生成CRUD操作,以便可以比较代码?感谢Antony,我没有意识到每个输入都需要规则。我添加了
数组('active','boolean')
,解决了这个问题。事实上,如果您在规则中将其定义为整数,那么yii足够聪明,知道它必须将bool转换为int,并且复选框代码位足够聪明,可以理解0和1代表什么(实际上在PHP中,任何整数都可以用作bool)例如,这也适用于非数值
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));?> 
array('active', 'safe'),