在Yii中调用字符串上的成员函数saveAs()

时间:2018-02-14 06:54:45

标签: php yii yii1.x

当我尝试将imgage文件上传到projectfolder\uploaded目录时,我收到了错误

  

致命错误:在字符串

上调用成员函数saveAs()

我的控制器代码如下

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外面的条件时,它会给我一个对象数组,如下图所示,如果它给我字符串,则在里面。

图片上传的表单属性是头像 enter image description here

2 个答案:

答案 0 :(得分:-1)

$model->avatar->saveAs($path);

这里你试图在头像上调用saveAs()

但不知何故,而不是对象头像是一个字符串。也许头像总是一个字符串。

var_dump($model->avatar)

会生成一个字符串。

这是错误消息显示的内容

答案 1 :(得分:-1)

我忘了在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'));
        }
    }
}