如何正确使用File验证规则

rules方法中file字段指定为file类型,但同时又想指定为required,不知为何总是有问题。




array('file','file','types'=>'zip,rar,gz,gzip,bz,bz2,tar','safe'=>true,'allowEmpty'=>true,'on'=>'update'),

array('file','file','types'=>'zip,rar,gz,gzip,bz,bz2,tar','safe'=>true,'on'=>'insert'),

/*

以上两个我不知道怎么才能简化一下,需要的效果是insert的时候上传文件字段必填;

update的时候可以不填,类似于注册用户的时候密码必填,更新的时候密码留空即不改变。

*/

array('publisher, product, version, licence_key, license_type, language, category', 'required'),

/*

array('file','required','on'=>'insert'), 

这里我不敢加,加了之后就总是提示我没有上传文件;

但是不加吧,它又没有红色的*提示必填,对客户有点不太友好。烦请各路大神指条明路。

*/



我在beforeSave方法里面处理上传文件 不知道思路对不对(为保证用户体验,没改名)

配置文件中 ‘upload’=‘upload/’;




$this->file=CUploadedFile::getInstance($this,'file');

if(!empty($this->file)){

	$this->file->saveAs(Yii::app()->params['upload'].$this->file->name);//保存到指定的文件夹

	$this->file=Yii::app()->params['upload'].$this->file->name;//把file字段设置为完整路径

	$this->size=filesize($this->file);

}