5

我有这个代码:

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。相反,我如何将其设为空,因为它是一个可为空的字段?

4

2 回答 2

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
    );
}
于 2012-06-05T16:54:59.020 回答
6

在您的控制器中,从加载属性后$_POST执行

$model->defaultPrinterId = $model->defaultPrinterId ? $model->defaultPrinterId : null;

这将更0改为null否则保持不变。

于 2012-06-05T14:51:50.110 回答