在Yii中保存复选框值
我不知道如何在Yii中正确保存复选框值。我有一个MySQL列,在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
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'),