我无法弄清楚如何在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()中有活动定义吗?
一般情况下,如果您在保存到数据库时遇到问题,我会替换
$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)
希望这对你有用......