我有一个条款,为公司在我的应用程序上传标志。上传和保存创建配置文件的工作正常。但在更新,标志去空,如果我不上传它了!
这是我的更新表
<?php $form = ActiveForm::begin([
'options' => ['enctype'=>'multipart/form-data']
]); ?>
.....
<?= $form->field($model, 'logo')->fileInput() ?>
...
我的控制器操作
if ($model->load($_POST) ) {
$file = \yii\web\UploadedFile::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'],
];
}
有什么想法吗????
2条答案
按热度按时间8hhllhi21#
skipOnEmpty
不适用于此处,因为在更新操作中,$model->logo
属性不会为空,它将是一个带有文件名的字符串。$file
仍然是一个只有键的数组,但如果不再次上载,则没有值。因此检查$file->size
,而不是检查!empty($file)
。通过修改控制器代码修复了此问题,如下所示!pjngdqdw2#
对于更新,可以跳过。