2013-09-30 15 views
1

我試圖添加一個文件上傳字段到一個形式在YII,而它成功地提交和上傳文件到正確的文件夾,它沒有添加任何東西到數據庫。YII文件上傳沒有添加到數據庫使用表格

我只學習這個平臺,所以任何指導都會很棒。

這是我的看法......

<div class="row"> 
    <div class="span4"><?php echo $form->labelEx($model,'slider_image'); ?></div> 
    <div class="span5"><?php echo $form->fileField($model,'slider_image'); ?></div> 
    <div class="span3"><?php echo $form->error($model,'slider_image'); ?></div> 
</div> 

這裏是我的控制器......

public function actionEdit() { 
    $id = Yii::app()->getRequest()->getQuery('id'); 
    $model = CustomPage::model()->findByPk($id); 
    if (!($model instanceof CustomPage)) { 
     Yii::app()->user->setFlash('error',"Invalid Custom Page"); 
     $this->redirect($this->createUrl("custompage/index")); 

    } 
    if(isset($_POST['CustomPage'])) { 
     $model->attributes = $_POST['CustomPage']; 
     $model->image=CUploadedFile::getInstance($model,'slider_image'); 

     if ($model->validate()) { 
      if ($model->deleteMe) { 
       $model->delete(); 
       Yii::app()->user->setFlash('info',"Custom page has been deleted"); 
       $this->redirect($this->createUrl("custompage/index")); 
      } else { 
       $model->request_url = _xls_seo_url($model->title); 
       if (!$model->save()) { 
        Yii::app()->user->setFlash('error',print_r($model->getErrors(),true)); 
       } else { 
        $model->image->saveAs(Yii::app()->baseUrl.'images/'.$model->image); 
        Yii::app()->user->setFlash('success', 
         Yii::t('admin','Custom page updated on {time}.',array('{time}'=>date("d F, Y h:i:sa")))); 
        $this->beforeAction('edit'); //In case we renamed one and we want to update menu 
       } 
      } 
     } 
    } 
} 

和我的模型

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
        // other rules 
     array('slider_image', 'file', 'types'=>'jpg, gif, png'), 
    ); 
} 

形式本身總體工作正常,不幸的是,我不明白如何YII增加到數據庫

感謝

阿德里安

編輯:香港專業教育學院也明顯得到了slider_image場在該表

+1

你的控制器代碼會做的是保存在upoloaded文件的文件名的數據庫表。另一件事是:你的代碼'$ model-> image = CUploadedFile :: getInstance($ model,'slider_image');'是指錯誤的屬性。我認爲它應該是'$ model-> slider_image = CUploadedFile :: getInstance($ model,'slider_image');'最後,你需要調用'$ model-> slider_image-> save('path.to.file') ;'爲了將文件保存到磁盤。 –

+0

謝謝你解決了這個問題! – Adrian

+0

很高興我能幫到你。剛發佈解決方案作爲答案,以便其他人可以輕鬆找到答案。 –

回答

2

你的控制器代碼會做的是保存upoloaded文件的文件名在你的數據庫表。另一件事是:你的代碼:

$model->image=CUploadedFile::getInstance($model,'slider_image');

指的是錯誤的屬性。我覺得應該是:

$model->slider_image=CUploadedFile::getInstance($model,'slider_image');

最後,你需要調用$model->slider_image->save('path.to.file');,以將文件保存到磁盤

0

我相信你在$model->validate()獲得股票。因爲你在這行上面複製圖像複製是很好的,但你不經過驗證,所以它不會保存到數據庫。

var_dump($model->validate());,看看到底是怎麼回事......