代码之家  ›  专栏  ›  技术社区  ›  Nileshsinh Rathod

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

  •  -1
  • Nileshsinh Rathod  · 技术社区  · 6 年前

    当我尝试将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 外部if条件为我提供一个对象数组,如下图所示;内部if条件为我提供字符串。

    图像上传的表单属性为avatar enter image description here

    2 回复  |  直到 6 年前
        1
  •  -1
  •   Shobi    6 年前

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

    给你打电话 saveAs() 在avatar上

    但不知何故,化身不是一个对象,而是一个字符串。也许《阿凡达》总是一根弦。

    var_dump($model->avatar)
    

    将生成字符串。

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

        2
  •  -1
  •   Nileshsinh Rathod    6 年前

    我忘了传入文件名 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'));
            }
        }
    }
    
    推荐文章