2013-09-30 17 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());,看看到底是怎么回事......