validate uploadedfile subir inputfile example archivos yii yii2

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.