Вызов функции-члена saveAs() для null (я не могу обновить, если не выберу изображение)

Я не могу обновить, если не выберу изображение. Что не так или я пропустил?

Это контроллер:

if ($model->load(Yii::$app->request->post())) {

        $nameImage=$model->name;

        $model->bookimg=UploadedFile::getInstance($model,'bookimg');
        $model->bookimg->saveAs('images/'.$nameImage.'.'.$model->bookimg->extension);

        $model->bookimg='images/'.$nameImage.'.'.$model->bookimg->extension;
        $model->save();

        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }

Это модель:

[['fkperiodo'], 'integer'],
[['date_public'], 'safe'],
[['name'], 'string', 'max' => 100],
[['volume'], 'string', 'max' => 5],
[['author',], 'string', 'max' => 255],
[['bookimg'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg'],
[['fkperiod'], 'exist', 'skipOnError' => true, 'targetClass' => Period::className(), 'targetAttribute' => ['fkperiod' => 'id']],

Это форма:

<?= $form->field($model, 'bookimg')->fileInput()->label('Book Cover') ?>

person Juam    schedule 05.09.2016    source источник
comment
stackoverflow.com/questions/37746082/ проверьте этот ответ   -  person jithin    schedule 06.09.2016


Ответы (1)


Вы должны проверить, есть ли у $model, подлежащего обновлению, уже изображение, и соответствующим образом отреагировать, если пользователь выбрал новое изображение.

Пример

if ($model->load(Yii::$app->request->post())) {

    $nameImage = $model->name;

    $old_image = $model->bookimg;

    $model->bookimg = UploadedFile::getInstance($model, 'bookimg');

    //If user has chosen an image
    if (!empty($model->bookimg)) {

        if (!empty($old_image)) {

            //Delete old image from filesystem or/and database
            //...
            //...

        }

        //Save the new image
        $model->bookimg->saveAs('images/'.$nameImage.'.'.$model->bookimg->extension);
        $model->bookimg = 'images/'.$nameImage.'.'.$model->bookimg->extension;
    }

    //Also consider checking if model has been successfully saved before redirect
    $model->save();

    return $this->redirect(['view', 'id' => $model->id]);

} else {
    return $this->render('update', [
        'model' => $model,
    ]);
}
person Kostas Mitsarakis    schedule 05.09.2016