uploadedfile - `Skip on empty` no funciona en la carga de archivos Yii2
yii2 upload file ajax (2)
Tengo una disposición para subir el logotipo de las empresas en mi aplicación. Cargar y guardar al crear perfil funciona bien. ¡Pero en la actualización, el logotipo se queda vacío si no lo estoy cargando de nuevo!
Aquí está mi formulario de actualización
<?php $form = ActiveForm::begin([
''options'' => [''enctype''=>''multipart/form-data'']
]); ?>
.....
<?= $form->field($model, ''logo'')->fileInput() ?>
...
Mi acción de controlador
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,
]);
}
Mis reglas:
public function rules()
{
return [
[[''logo''], ''image'', ''extensions'' => ''jpg,png'', ''skipOnEmpty'' => true],
[[''name''], ''required''],
[[''name'', ''description''], ''string''],
];
}
¿¿¿¿Algunas ideas????
skipOnEmpty
no se aplica aquí porque en la acción de actualización el atributo $model->logo
no estará vacío, será una cadena con el nombre del archivo. $file
sigue siendo una matriz con solo claves, pero no valores si no se carga nuevamente. Por lo tanto, verificó $file->size
lugar de marcar !empty($file)
. ¡Solucionado el problema modificando el código del controlador de la siguiente manera!
$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,
]);
}
''skipOnEmpty'' => !$this->isNewRecord
Para la actualización, se puede omitir.