我有这个代码:
echo $form->dropDownList($model,
'defaultPrinterId',
CHtml::listData(Printer::model()->findAll(), 'id', 'name'),
array('prompt' => '-- None--'));
Run Code Online (Sandbox Code Playgroud)
这给了我一个这样的下拉列表:
<select id="LabelType_defaultPrinterId" name="LabelType[defaultPrinterId]">
<option value="">-- None --</option>
</select>
Run Code Online (Sandbox Code Playgroud)
但是,当表单发布时,它会向我的表中添加一个值,其中defaultPrinterId为0.而不是那样,我如何将其设为null,因为它是一个可空的字段?
小智 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
);
}
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,从$_POSTdo a 加载属性后
$model->defaultPrinterId = $model->defaultPrinterId ? $model->defaultPrinterId : null;
这改变了0,null否则不加修改.