2014-01-07 68 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

不客气。我也是最多的受害者(尽管我知道这是文件上传所必需的) –