0

如果我不选择图像,我将无法更新。做错了什么或者我错过了什么?

这是一个控制器:

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') ?>
4

1 回答 1

0

您必须检查$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,
    ]);
}
于 2016-09-05T22:15:38.217 回答