Salam sejahtera...Pada tutorial kali ini saya akan membagikan  pengalaman bagaimana caranya mengupload file ke Database di Yii Framework. File yang akan diupload nanti dapat di validasi/anda batasi tipe filenya, yang mana semuanya tersedia di YII. Untuk mengupload file  pertama anda harus menyiapkan sebuah field file didatabase dengan tipe varchar(100) atau anda dapat menyisip field dengan perintah ini :

ALTER TABLE `XXX` ADD `file_upload` VARCHAR( 100 ) NOT NULL ;

1. lakukan modifikasi script di model pada bagian rules, tambahkan kode berikut

array('file_upload', 'file', 'types' => 'jpg,pdf,doc,docx',

         'allowEmpty' => true, 'maxSize' => 1024 * 1024 * 50,

         'tooLarge' => 'The file was larger than 50 MB. Please upload a smaller file.',

          'on' => 'update',

         ),

    kode diatas adalah untuk menetapkan field file_upload yang diterima adalah "jpg,pdf,doc dan docx" selain itu akan ditolak oleh sistem, validasi juga akan membatasi file maksimal 50 MB.

2. Lakukan modifikasi lagi pada script Controller sebelumnya siapkan sebuah folder FileUpload di direktori kerja anda contoh htdocs/direktorikerja/FileUpload

public function actionCreate()

    {

        $model=new Tbregister;

        $option=$_GET['option'];

       

        $path = Yii::app()->basePath . '/../FileUpload';

        if (!is_dir($path)) {

            mkdir($path);

        }

       

        if(isset($_POST['Tbregister']))

        {

            $rnd = rand(0,9999); //nomor unik untuk nama file

            $model->attributes=$_POST['Tbregister'];

            if($_POST['Tbregister']['tujuan_kirim'] != null)

            {

                                $model->tujuan_kirim=implode(',',$_POST['Tbregister']['tujuan_kirim']);//converting to string...

               

            }

            $uploadedFile=CUploadedFile::getInstance($model,'file_upload'); //mengambil atribute file upload dari form

            $fileName = "{$rnd}-{$uploadedFile}";  // random number + file name

            if(!empty($uploadedFile)){         //jika file tidak kosong isi field file_upload dengan nama file

                $model->file_upload = $fileName;

                }

 

            if($model->save())

            {

                if(!empty($uploadedFile))   // check jika t file tidak kosong maka upload ke folder file upload

                {

                        $uploadedFile->saveAs(Yii::app()->basePath.'/../FileUpload/'.$fileName);

                    }

                //}

                Yii::app()->user->setFlash('success', '<strong>Well done!</strong> You successfully input the register');

                $this->redirect(array('view','id'=>$model->id_register,'option'=>$option));   

            }

        }

        $model->tgl_input=date('d-m-Y');

        $model->input_by=Yii::app()->user->name;

       

        $this->render('create',array(

            'model'=>$model,

        ));

    }

3. Terakhir adalah pada form  lakukan modifikasi pada  awal form dan field file_upload di form

<?php

    $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(

    'id'=>'tbregister-form',

    'type'=>'horizontal',

    'method'=>'post',

    'htmlOptions'=>array(    

    'enctype' => 'multipart/form-data'

    )

)); ?>

 

        <div>

            <?php echo $form->fileFieldRow($model,'file_upload',array('size'=>50,'maxlength'=>50)); ?>

       </div>