我无法弄清楚如何在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
的值。我哪里错了?
答案 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。