Как обновить изображения в Yii2?

Освоить загрузку файлов оказалось просто.
Остановился на замене этого файла. Конкретно для данного проекта не критично удалять загруженный файл.

Конкретно:
после загрузки файла, поле fileInput, не имеет файла следовательно после fileInput остаётся пустым и при сохранении запись о файле из бд. стирается.

Сам input по умолчания не имеет свойства value. Как обходят эту проблему?
<?= $form->field($model, 'image')->fileInput() ?>

//вариант 1
        if ($model->load(Yii::$app->request->post()) && $model->save()) {

            $namefile = date("U");
            $model->image = UploadedFile::getInstance($model, 'image');
            $model->image->saveAs('images/'.$model->image->baseName.'_'.$namefile.'.'.$model->image->extension );
            $model->image = 'images/'.$model->image->baseName.'_'.$namefile.'.'.$model->image->extension;
            $model->save();

            return $this->redirect(['view', 'id' => $model->ID]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
//вариант 2
        if ($model->load(Yii::$app->request->post()) && $model->save()) {


            //represent the uploaded file as an instance
            $namefile = date("U");
            $model->image = UploadedFile::getInstance($model, 'image');

            //save path to image in db
            if($model->image){
                $model->image->saveAs('images/'.$model->image->baseName.'_'.$namefile.'.'.$model->image->extension );
                $model->image = '/images/' . $model->image->baseName . '.' . $model->image->extension;
            }
            //save changes in db
            $model->save();
            //upload image on server
            if($model->image){
                $model->upload();
            }
            return $this->redirect(['view', 'id' => $model->ID]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
  • Вопрос задан
  • 484 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
В одном аттрибуте должно содержаться имя файла в другом сам файл.
Допустим в базе у Вас 'imagename', на него вешаем валидатор string
добавляем в модель другой атрибут public $file; вешаем на него валидатор image и его используем в форме, а 'imagename' дергаем только если есть что-то в $_FiLES
видео урок: загрузка фото в yii2
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы