使用Bootstrap fileInput扩展上传图片,在model的rules定义了空值验证( 'skipOnEmpty' => false),上传图片后,文件有按新文件名上传至服务器,但文件名未写入数据库,且返回视图引发空值验证规则(如图一)
请教哪位大神,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']) ?>