【问题标题】:Call to a member function saveAs() on string in Yii在 Yii 中调用字符串的成员函数 saveAs()
【发布时间】:2018-02-14 06:54:44
【问题描述】:

当我尝试将图像文件上传到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 if 条件时,它给了我一个对象数组,如下图所示,如果它给了我字符串,则在内部。

图片上传的表单属性是头像

【问题讨论】:

    标签: php yii yii1.x


    【解决方案1】:

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

    您正在尝试在头像上调用saveAs()

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

    var_dump($model->avatar)
    

    会产生一个字符串。

    这就是错误消息显示的内容

    【讨论】:

    • $model->avatar 并不总是字符串,如果我 var_dump($model->avatar) 之前如果我得到对象数组但在 save() 之后我得到字符串
    • 现在你有确切的问题(实际的错误)。你可以试试看。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2016-05-10
      • 2018-08-26
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多