4

モデルを使用してファイルをアップロードしようとしています。現在の状況で例外メッセージが表示されます (以下のモデル/コントローラー/ビューを参照):

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

私のモデルが CFormModel の代わりに CActiveRecord を拡張する場合、別の例外があります:

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'),
        );
    }
}

コントローラー: 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();

 ?>
4

3 に答える 3

6

CFormModelという名前のメソッドがありませんsave()。それを呼び出したい場合は実装する必要がありますが、あなたのケースで必要なのはvalidateメソッドを使用することです

MyFile関連する db テーブルがない場合は、拡張しないでくださいCActiveRecord

を呼び出して、アップロードされた画像が gif、png、または jpg であることを検証できますvalidate()

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));
        }
    }
}
于 2013-11-04T16:01:40.280 に答える
0
  public function actionCreate() {
    $model = new Item;
    if (isset($_POST['Item'])) {
        $model->attributes = $_POST['Item'];
        $model->images = CUploadedFile::getInstance($model, 'images');
        if ($model->save()) {
            $path = Yii::app()->basePath . '/../uploads/' . $model->images;
            $model->images->saveAs($path);
            // redirect to success page
        }
    }
    $this->render('upload', array('model' => $model));
}
于 2014-03-25T08:10:36.663 に答える
0
   $img = CUploadedFile::getInstance($model,'file');
        $randomNAme = hash('sha512',$model->file);

        $path = Yii::app()->basePath.'/'.'uploads/'.$img;
        $img->saveAs($path);
于 2016-07-13T05:24:19.337 に答える