php – Yii使用模型上传文件

我只是尝试使用模型上传文件.我在当前情况下得到异常消息(参见下面的model / controller / view):

CException
MyFile and its behaviors do not have a method or closure named "save". 

如果我的模型扩展了CActiveRecord而不是CFormModel,则会出现另一个异常:

CDbException
The table "MyFile" for active record class "MyFile" cannot be found in the database. 

我的错是什么?这些是文件

型号:MyFile.PHP

class MyFile extends CFormModel {
    public $image;
    public function rules () {
        return array (
            array ('image', 'file', 'types' => 'gif, jpg, png'),
        );
    }
}

CONTROLLER:MyFileController.PHP

class MyFileController extends CController {
    public function actionCreate() {
        $model = new MyFile;

        if(isset($_POST['MyFile'])) {

            $model->attributes=$_POST['MyFile'];
            $model->image=CUploadedFile::getInstance($model,'image');
            if($model->save()) {
                $path = Yii::app()->runtimePath.'/temp/uploadDirectory/'.$model->image;
                $model->image->saveAs($path);
            }
        }
        $this->render('create', array('model'=>$model));
    }
}

查看:create.PHP

 <h1>File-Upload</h1>

 <?PHP

    echo CHtml::form('','post',array('enctype'=>'multipart/form-data'));
    echo CHtml::activeFileField($model, 'image');
    echo CHtml::submitButton('abschicken', array('name' => 'submit'));
    echo CHtml::endForm();

 ?>

解决方法:

CFormModel没有名为save()的方法,如果你想调用它你必须实现它,但你想要的是使用validate方法

如果MyFile没有相关的db表,那么它不应该扩展CActiveRecord.

您可以通过调用validate()来验证上传的图像是gif,png还是jpg:

class MyFileController extends CController {
    public function actionCreate() {
        $model = new MyFile;

        if(isset($_POST['MyFile'])) {

            $model->attributes=$_POST['MyFile'];
            $model->image=CUploadedFile::getInstance($model,'image');
            if($model->validate()) {
                //The image is valid, you can save it
                $path = Yii::app()->runtimePath.'/temp/uploadDirectory/'.$model->image;
                $model->image->saveAs($path);
            }
            $this->render('create', array('model'=>$model));
        }
    }
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...