После ужасного дня и более продуктивной ночи, я обнаружил решение, которое работало для меня ..
Основная проблема заключалась в том, что входной файл не посылают его значение (имя файла, хранящегося в базы данных) при обновлении. Он только отправляет информацию об изображении, если просматривается и выбирается с помощью ввода файла.
Итак, моим обходным путем было создано еще одно «виртуальное» поле для управления загрузкой файлов под названием «upload_image». Для достижения этой цели я просто добавил общественную собственность с этим именем в моей модели класса: public $upload_image;
Я также добавить проверку folowing методу правил по классу модели:
public function rules()
{
return [
[['upload_image'], 'file', 'extensions' => 'png, jpg', 'skipOnEmpty' => true],
[['image'], 'required'],
];
}
Здесь «upload_image» мой виртуальный колонка. Я добавил «файл» с помощью «skipOnEmpty» = true, а «образ» - это поле в моей базе данных, которое должно быть необходимо в моем случае.
Тогда, на мой взгляд, я настроил «upload_image» виджетом, как следует:
echo FileInput::widget([
'model' => $model,
'attribute' => 'upload_image',
'pluginOptions' => [
'initialPreview'=>[
Html::img("/uploads/" . $model->image)
],
'overwriteInitial'=>true
]
]);
В опции «initialPreview» Я Asign мое имя изображения, хранящуюся в свойстве «$ модели-> изображение» возвращенную из базы данных.
Наконец, мой контроллер выглядит следующим образом:
public function actionUpdate($id)
{
$model = $this->findModel($id);
$model->load(Yii::$app->request->post());
if(Yii::$app->request->isPost){
//Try to get file info
$upload_image = \yii\web\UploadedFile::getInstance($model, 'upload_image');
//If received, then I get the file name and asign it to $model->image in order to store it in db
if(!empty($upload_image)){
$image_name = $upload_image->name;
$model->image = $image_name;
}
//I proceed to validate model. Notice that will validate that 'image' is required and also 'image_upload' as file, but this last is optional
if ($model->validate() && $model->save()) {
//If all went OK, then I proceed to save the image in filesystem
if(!empty($upload_image)){
$upload_image->saveAs('uploads/' . $image_name);
}
return $this->redirect(['view', 'id' => $model->id]);
}
}
return $this->render('update', [
'model' => $model,
]);
}