在 yii2 的非对象上调用成员函数 saveAs()
Call to a member function saveAs() on a non-object in yii2
我正在尝试 运行 Yii2 中的应用程序
我尝试上传用户个人资料图片,效果很好
但是当我尝试更新名称文件时问题就开始了。它向我显示 Call to a member function saveAs() on a non-object
之类的错误。
我什至尝试在没有任何更改的情况下进行更新。即使那个时候也显示相同的错误...
但如果我更改图片,就会出错。
这是我的控制器
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
// get the instance of uploaded file
$imageName = $model->user_username;
$model->file = UploadedFile::getInstance($model,'user_avatar');
$model->file->saveAs( '/uploads/'.$imageName.'.'.$model->file->extension );
//save the path in DB..
$model->user_avatar = 'uploads/'.$imageName.'.'.$model->file->extension;
$model->save();
return $this->redirect(['view', 'id' => $model->user_id]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
模型规则
public function rules()
{
return [
[['user_email', 'user_password'], 'required'],
// [['user_password'], 'required'],
[['user_username'], 'string', 'max' => 45],
[['user_first_name'], 'required'],
[['user_app_user_id'], 'required',
[['user_type','user_app_name','user_status'], 'string'],
[['user_app_user_id'], 'integer'],
[['user_rememberMe'], 'boolean'],
[['user_first_name', 'user_last_name'], 'string', 'max' => 100],
[['user_email'], 'string', 'max' => 150],
[['user_password'], 'string', 'min'=>6],
[['user_password'], 'string', 'max' => 40,
[['user_avatar'],'file'],
//[['user_avatar'], 'string', 'max' => 500],
[['user_verification_code','user_auth_key'], 'string'],
[['user_email'], 'email'],
[['user_email'], 'filter', 'filter' => 'trim'],
];
}
试试这个..
$model->file = UploadedFile::getInstance($model,'user_avatar');
$ext = substr(strrchr($model->file,'.'),1);
if($ext != null)
{
$newfname = $model->user_username.'.'.$ext;
$model->file->saveAs(Yii::getAlias('@webroot') .'/uploads/' .$model->user_avatar = $newfname);
}
您的代码需要上传文件。您应该在此处添加条件:
if ($model->file = UploadedFile::getInstance($model,'user_avatar')) {
$model->file->saveAs( '/uploads/'.$imageName.'.'.$model->file->extension );
//save the path in DB..
$model->user_avatar = 'uploads/'.$imageName.'.'.$model->file->extension;
$model->save();
}
我不确定这是否正确,但有时我们只需要取消设置 img 模型所需的规则:
命名空间app\models;
[['img','post_img'], 'required'], -<<<<Delete this
删除requirede规则后,我的烦恼就消失了。希望能对某人有所帮助。
我正在尝试 运行 Yii2 中的应用程序
我尝试上传用户个人资料图片,效果很好
但是当我尝试更新名称文件时问题就开始了。它向我显示 Call to a member function saveAs() on a non-object
之类的错误。
我什至尝试在没有任何更改的情况下进行更新。即使那个时候也显示相同的错误...
但如果我更改图片,就会出错。
这是我的控制器
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
// get the instance of uploaded file
$imageName = $model->user_username;
$model->file = UploadedFile::getInstance($model,'user_avatar');
$model->file->saveAs( '/uploads/'.$imageName.'.'.$model->file->extension );
//save the path in DB..
$model->user_avatar = 'uploads/'.$imageName.'.'.$model->file->extension;
$model->save();
return $this->redirect(['view', 'id' => $model->user_id]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
模型规则
public function rules()
{
return [
[['user_email', 'user_password'], 'required'],
// [['user_password'], 'required'],
[['user_username'], 'string', 'max' => 45],
[['user_first_name'], 'required'],
[['user_app_user_id'], 'required',
[['user_type','user_app_name','user_status'], 'string'],
[['user_app_user_id'], 'integer'],
[['user_rememberMe'], 'boolean'],
[['user_first_name', 'user_last_name'], 'string', 'max' => 100],
[['user_email'], 'string', 'max' => 150],
[['user_password'], 'string', 'min'=>6],
[['user_password'], 'string', 'max' => 40,
[['user_avatar'],'file'],
//[['user_avatar'], 'string', 'max' => 500],
[['user_verification_code','user_auth_key'], 'string'],
[['user_email'], 'email'],
[['user_email'], 'filter', 'filter' => 'trim'],
];
}
试试这个..
$model->file = UploadedFile::getInstance($model,'user_avatar');
$ext = substr(strrchr($model->file,'.'),1);
if($ext != null)
{
$newfname = $model->user_username.'.'.$ext;
$model->file->saveAs(Yii::getAlias('@webroot') .'/uploads/' .$model->user_avatar = $newfname);
}
您的代码需要上传文件。您应该在此处添加条件:
if ($model->file = UploadedFile::getInstance($model,'user_avatar')) {
$model->file->saveAs( '/uploads/'.$imageName.'.'.$model->file->extension );
//save the path in DB..
$model->user_avatar = 'uploads/'.$imageName.'.'.$model->file->extension;
$model->save();
}
我不确定这是否正确,但有时我们只需要取消设置 img 模型所需的规则:
命名空间app\models;
[['img','post_img'], 'required'], -<<<<Delete this
删除requirede规则后,我的烦恼就消失了。希望能对某人有所帮助。