使用Bootstrap fileInput扩展上传图片,在model的rules定义了空值验证( 'skipOnEmpty' => false),上传图片后,文件有按新文件名上传至服务器,但文件名未写入数据库,返回视图后引发空值验证规则(如图)

dd.png

请教哪位大神,controller是哪里逻辑有问题,还是该怎么做好!

Controller文件

public function actionImage($id)
{
    $model = $this->findModel($id);
    $rootPath = "uploads/UserIdImage/";    //定义上传的根目录
    $oldFile = $rootPath . $model->image; //保存旧头像路径与文件名,上传新的文件后删除用

    if (Yii::$app->request->isPost) {
        $model->image = UploadedFile::getInstance($model, 'image');
        if ($model->image && $model->validate()) {
            $ext = $model->image->extension;
            $randName = "userid" . time() . rand(1000, 9999) . "." . $ext;
            $model->image->saveAs($rootPath . $randName);
            $model->image = $randName;
            unlink($oldFile);
            $model->save();
        }
    }    return $this->render('image', ['model' => $model]);
}


Model文件

public function rules()
{    return [
        ['status', 'default', 'value' => self::STATUS_ACTIVE],
        ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
        [['email'], 'unique'],
        [['email'], 'required'],
        [['email'], 'email'],
        [['image'], 'file', 'maxSize' => 1024 * 1024, 'skipOnEmpty' => false],
    ];
}


VIEW文件

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'image')->widget(FileInput::classname(), [
'options' => ['accept' => 'image/*'],
]);
?>
<?= Html::submitButton('上传', ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end() ?>



  • 评论于 2018-02-06 10:54:18

    发现一个网站建设素材和代码都非常实用的网站,最近工作效率提高不少。分享下二当家的素材网http://www.erdangjiade.com

    回复
您需要登录后才可以评论。登录 | 立即注册