2014-01-07 65 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 rules() 
{ 

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

控制器:

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']; 

     if (CUploadedFile::getInstance($model,'slider_image')) { 

     $model->slider_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 
       { 
        if (CUploadedFile::getInstance($model,'slider_image')) { 
        $model->slider_image->saveAs(Yii::app()->baseUrl.'images/'.$model->slider_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 

       } 
      } 
     } 

    } 
    $this->render('edit',array('model'=>$model)); 

} 

我試圖die;if (CUploadedFile::getInstance($model,'slider_image'))後什麼也沒有發生,所以它似乎根本不承認它。

謝謝。

+0

檢查print_r($ _ FILES)上的actionEdit。 –

+0

沒有錯誤不幸的是 – Adrian

+0

print_r($ _ FILES)給了我一個空數組 – Adrian

回答

2

我想你錯過了一個小的指令,在你看來

檢查,以確認你的表單標籤具有屬性「ENCTYPE」

<form action="" method="post" enctype="multipart/form-data">...</form>

要設置這CActiveForm,做:

<?php $form = $this->widget('CActiveForm', array(
     'htmlOptions'=>array('enctype'=>'multipart/form-data') 
));?> 
+0

非常感謝,這個問題立即解決了,我從未意識到這是必要的,下次我需要確保包含更多代碼 – Adrian

+0

不客氣。我也是最多的受害者(儘管我知道這是文件上傳所必需的) –