"Пропустить на пустой` не работает в загрузке файла Yii2
у меня есть положение для загрузки логотипа для компаний в моем приложении. Загрузка и сохранение при создании профиля работает нормально. Но при обновлении логотип пустеет, если я не загружаю его снова!
вот моя форма обновления
<?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'],
];
}
какие идеи????
2 ответов
skipOnEmpty
не применяется здесь, потому что в действие обновление $model->logo
атрибут не будет пустым, это будет строка с именем файла.$file
по-прежнему является массивом только с ключами, но не значениями, если они не загружены снова. Поэтому проверил $file->size
вместо проверки !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,
]);
}