在 Yii 中调用字符串的成员函数 saveAs()
Call to a member function saveAs() on string in Yii
当我尝试将图像文件上传到 projectfolder\uploaded
目录时出现错误
Fatal error: Call to a member function saveAs() on string
我的控制器代码如下
public function actionStore()
{
$model = new Article;
$this->performArticleValidation($model);
$userId = Yii::app()->user->getId();
if(isset($_POST['Article'])) {
$model->attributes = $_POST['Article'];
$model->avatar = CUploadedFile::getInstance($model,'avatar');
//var_dump($model->avatar); // Outside if
if($model->save()) {
//var_dump($model->avatar); // Inside if
$path = Yii::app()->basePath . '/../uploaded';
$model->avatar->saveAs($path);
EUserFlash::setSuccessMessage('Thank you.');
$this->redirect(array('index'));
}
}
}
型号如下
public function rules() {
return array(
array(['avatar'], 'file', 'skipOnEmpty' => false, 'types' => 'jpg, jpeg, gif, png'),
);
}
当我尝试在外部调试 $model->avatar
if 条件时,它会给我一个对象数组,如下图所示,如果它会给我字符串,则会在内部调试。
图片上传的表单属性为头像
$model->avatar->saveAs($path);
您在这里尝试在头像上调用 saveAs()
但不知何故,代替对象头像的是字符串。也许头像总是一个字符串。
var_dump($model->avatar)
会产生一个字符串。
这就是错误消息显示的内容
我忘记在 saveAs()
中传递文件名,我只是传递目录路径,所以图片没有上传。
public function actionStore()
{
$model = new Article;
$this->performArticleValidation($model);
$userId = Yii::app()->user->getId();
if(isset($_POST['Article'])) {
$model->attributes = $_POST['Article'];
$model->created_at = date('Y-m-d H:i:s',time());
$uploadedFile = CUploadedFile::getInstance($model, 'avatar');
$model->avatar = strtotime("now").'.'.$uploadedFile->getExtensionName();
$model->created_by = $userId;
if($model->save()) {
$path = Yii::app()->basePath.'\..\uploaded\articles';
$uploadedFile->saveAs($path.'/'.$model->avatar);
EUserFlash::setSuccessMessage('Thank you.');
$this->redirect(array('index'));
}
}
}
当我尝试将图像文件上传到 projectfolder\uploaded
目录时出现错误
Fatal error: Call to a member function saveAs() on string
我的控制器代码如下
public function actionStore()
{
$model = new Article;
$this->performArticleValidation($model);
$userId = Yii::app()->user->getId();
if(isset($_POST['Article'])) {
$model->attributes = $_POST['Article'];
$model->avatar = CUploadedFile::getInstance($model,'avatar');
//var_dump($model->avatar); // Outside if
if($model->save()) {
//var_dump($model->avatar); // Inside if
$path = Yii::app()->basePath . '/../uploaded';
$model->avatar->saveAs($path);
EUserFlash::setSuccessMessage('Thank you.');
$this->redirect(array('index'));
}
}
}
型号如下
public function rules() {
return array(
array(['avatar'], 'file', 'skipOnEmpty' => false, 'types' => 'jpg, jpeg, gif, png'),
);
}
当我尝试在外部调试 $model->avatar
if 条件时,它会给我一个对象数组,如下图所示,如果它会给我字符串,则会在内部调试。
图片上传的表单属性为头像
$model->avatar->saveAs($path);
您在这里尝试在头像上调用 saveAs()
但不知何故,代替对象头像的是字符串。也许头像总是一个字符串。
var_dump($model->avatar)
会产生一个字符串。
这就是错误消息显示的内容
我忘记在 saveAs()
中传递文件名,我只是传递目录路径,所以图片没有上传。
public function actionStore()
{
$model = new Article;
$this->performArticleValidation($model);
$userId = Yii::app()->user->getId();
if(isset($_POST['Article'])) {
$model->attributes = $_POST['Article'];
$model->created_at = date('Y-m-d H:i:s',time());
$uploadedFile = CUploadedFile::getInstance($model, 'avatar');
$model->avatar = strtotime("now").'.'.$uploadedFile->getExtensionName();
$model->created_by = $userId;
if($model->save()) {
$path = Yii::app()->basePath.'\..\uploaded\articles';
$uploadedFile->saveAs($path.'/'.$model->avatar);
EUserFlash::setSuccessMessage('Thank you.');
$this->redirect(array('index'));
}
}
}