“跳空”不能在Yii2文件上传中工作
发布时间:2020-12-13 16:03:03 所属栏目:PHP教程 来源:网络整理
导读:我有条款为我的申请中的公司上传徽标.上传和保存创建配置文件工作正常.但是在更新时,如果我不再上传它,徽标就会变空! 这是我的更新表格 ?php $form = ActiveForm::begin([ 'options' = ['enctype'='multipart/form-data'] ]); ? ..... ?= $form-field($mode
我有条款为我的申请中的公司上传徽标.上传和保存创建配置文件工作正常.但是在更新时,如果我不再上传它,徽标就会变空!
这是我的更新表格 <?php $form = ActiveForm::begin([ 'options' => ['enctype'=>'multipart/form-data'] ]); ?> ..... <?= $form->field($model,'logo')->fileInput() ?> ... 我的控制器动作 if ($model->load($_POST) ) { $file = yiiwebUploadedFile::getInstance($model,'logo'); if($file){ $model->logo=$file; } if($model->save()){ if($file) $file->saveAs(Yii::$app->basePath . '/web/images/'.$file); } return $this->redirect(['profile']); } else { return $this->renderPartial('update',[ 'model' => $model,]); } 我的规则: public function rules() { return [ [['logo'],'image','extensions' => 'jpg,png','skipOnEmpty' => true],[['name'],'required'],[['name','description'],'string'],]; } 有任何想法吗????
skipOnEmpty不适用于此处,因为在更新操作中,$model-> logo属性不会为空,它将是一个带有文件名的字符串.$file仍然是一个只包含键的数组,但如果没有再次上传则不是值.所以检查$file->大小而不是检查!empty($file).通过修改控制器代码解决了以下问题!
$model = $this->findModel($id); $current_image = $model->featured_image; if ($model->load(Yii::$app->request->post())) { $image= UploadedFile::getInstance($model,'featured_image'); if(!empty($image) && $image->size !== 0) { //print_R($image);die; $image->saveAs('uploads/' . $image->baseName . '.' .$image->extension); $model->featured_image = 'uploads/'.$image->baseName.'.'.$image->extension; } else $model->featured_image = $current_image; $model->save(); return $this->redirect(['update','id' => $model->module_id]); } else { return $this->render('add',[ 'model' => $model,]); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |