【问题标题】:Fatal error: Class 'CModelEvent' not found in CModel.php on line 189致命错误:在第 189 行的 CModel.php 中找不到类“CModelEvent”
【发布时间】:2014-07-11 14:00:59
【问题描述】:

每当我尝试保存模型而不使用发布表单但直接从 excel 文件中获取数据并将其分配给模型属性时,我都会收到此错误(致命错误:未找到“CModelEvent”类),如下所示:

   public function actionImportFile() {
        if (isset($_POST['User'])) {
            Yii::import('application.extensions.yii-phpexcel.PHPExcel', true);
            $objPHPExcel = PHPExcel_IOFactory::load($_FILES['User']['tmp_name']['import_file']); 
            $objWorksheet = $objPHPExcel->getActiveSheet();
            $model = new User('create');
            $model->firstname = $objWorksheet->getCellByColumnAndRow(1, 2)->getValue();
            $model->lastname = $objWorksheet->getCellByColumnAndRow(2, 2)->getValue();
            $model->password = 'password';
            $model->email = 'nt@yahoo.com';
            $model->usertype = -1;
            $model->status = 1;
            if ($model->save())
                $this->redirect(array('index'));
        }
    }

规则定义如下:

  public function rules() {
        return array(
            array('firstname, lastname, email, status, usertype, password', 'required'),
        );
    }

我认为此错误是由于验证失败,因为当我尝试将模型另存为 $model->save(false) 时,它会保存记录,但我想应用验证规则。 如果有人知道这个错误,请帮助我.....

如果我按以下方式更改上述功能,我发现了另一件事:

public function actionImportFile() {
            if (isset($_POST['User'])) {
               // Yii::import('application.extensions.yii-phpexcel.PHPExcel', true);
               // $objPHPExcel = PHPExcel_IOFactory::load($_FILES['User'] ['tmp_name'['import_file']); 
              //  $objWorksheet = $objPHPExcel->getActiveSheet();
                $model = new User('create');
                $model->firstname = 'test'; //$objWorksheet->getCellByColumnAndRow(1, 2)->getValue();
                $model->lastname = 'test2';//$objWorksheet->getCellByColumnAndRow(2, 2)->getValue();
                $model->password = 'password';
                $model->email = 'nt@yahoo.com';
                $model->usertype = -1;
                $model->status = 1;
                if ($model->save())
                    $this->redirect(array('index'));
            }
        }

然后它保存模型,但上传 $_FILES['User'] ['tmp_name'['import_file'] 这会出错。

【问题讨论】:

  • 在保存验证后尝试打印错误:$model->save(); print_r($model->getErrors());
  • 我已经这样做了,但结果相同,现在尝试了 agion 但同样的错误。
  • 尝试:$model->save(); print_r($model->getErrors()); die; 因为重定向不打印错误
  • 感谢您的回复,但还是同样的错误。
  • 我已更新我的问题以查看实际问题但尚未解决。

标签: php yii


【解决方案1】:

我通过在导入函数Yii::import('application.extensions.yii-phpexcel.PHPExcel', true); 之前添加spl_autoload_unregister(array('YiiBase', 'autoload')); 和在它之后添加spl_autoload_register(array('YiiBase', 'autoload')); 解决了这个问题。整个函数现在如下所示,并且现在可以正常工作:

 public function actionImportFile() {
        if (isset($_POST['User'])) {
            spl_autoload_unregister(array('YiiBase', 'autoload'));
            Yii::import('application.extensions.yii-phpexcel.PHPExcel', true);
            spl_autoload_register(array('YiiBase', 'autoload'));
            $objPHPExcel = PHPExcel_IOFactory::load($_FILES['User']['tmp_name']['import_file']); 
            $objWorksheet = $objPHPExcel->getActiveSheet();
            $model = new User('create');
            $model->firstname = $objWorksheet->getCellByColumnAndRow(1, 2)->getValue();
            $model->lastname = $objWorksheet->getCellByColumnAndRow(2, 2)->getValue();
            $model->password = 'password';
            $model->email = 'nt@yahoo.com';
            $model->usertype = -1;
            $model->status = 1;
            if ($model->save())
                $this->redirect(array('index'));
        }
    }

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2012-11-08
    • 2015-01-18
    • 1970-01-01
    • 2014-12-28
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多