我有这段代码:
echo $form->dropDownList($model,
'defaultPrinterId',
CHtml::listData(Printer::model()->findAll(), 'id', 'name'),
array('prompt' => '-- None--'));
这给了我一个这样的下拉列表:
<select id="LabelType_defaultPrinterId" name="LabelType[defaultPrinterId]">
<option value="">-- None --</option>
</select>
但是,当表单发布时,它会向我的表中添加一个值,其中defaultPrinterId为0.而不是那样,我如何将其设为null,因为它是一个可以为空的字段?
答案 0 :(得分:8)
如果您想严格遵循MVC,那么应该在模型中验证与模型相关的值。
可以通过以下方式完成:
/**
* @return array validation rules for model attributes.
*/
public function rules() {
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
//rules rules rules...
array('defaultPrinterId', 'default', 'setOnEmpty' => true, 'value' => NULL),
//rest of the rules
);
}
答案 1 :(得分:6)
在您的控制器中,从$_POST
加载属性后执行
$model->defaultPrinterId = $model->defaultPrinterId ? $model->defaultPrinterId : null;
这会将0
更改为null
,否则会将其保留为未修改状态。