Yii文件字段发布空值

时间:2014-11-24 03:09:50

标签: php yii

我是Yii的新手,我想在Yii中上传表格,请我帮忙。

一旦表单将数据发布到控制器,除了文件值之外,每个其他发布值都会被发布。 我甚至尝试使用var_dump($model->image);检查错误,并返回此错误string '' (length=0)指定一个空字符串,就像图像根本没有发布一样。

这是我的控制器

 class TestController extends Controller
    {

public function actionIndex()
    {
        $model=new Test;
        if(isset($_POST['Test']))
        { 
            $model->attributes=$_POST['Test'];

                   if($model->save()){
                       var_dump($model->getErrors());

                   if ($model->image){
                          var_dump($model->image);
                         $uploadedFile=CUploadedFile::getInstance($model,'image');
                         $fileName = date("Y_m_d_H_i_s").$uploadedFile;
                         $model->image = $fileName;
                         if(!empty($uploadedFile))  // check if uploaded file is set or not
                         {
                           $uploadedFile->saveAs(Yii::getPathOfAlias('webroot').'/imagefolder/'.$fileName);
                         }
                   }
          }

         }

    }

}

这是我的观点

    <?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'test-form',
    'htmlOptions' => array('enctype' => 'multipart/form-data'),
    'enableAjaxValidation'=>false,
)); ?> 

<?php echo CHtml::activeFileField($model,'image',array('id'=>'primaryupload')); ?>

<?php echo CHtml::submitButton($model->isNewRecord ? 'UPLOAD' : 'UPLOAD',array('id'=>'submit','class'=>'btn')); ?>

<?php $this->endWidget(); ?>

任何帮助将不胜感激。因为我现在真的很沮丧。

3 个答案:

答案 0 :(得分:2)

我认为您应该使用$ _FILES ['image']而不是$ model-&gt; image。

答案 1 :(得分:2)

如果您只是Yii的新手,而不是PHP,那么您可能知道上传的文件是通过$_FILES全局变量而不是$_POST全局变量。因此,要获取上传文件,请使用

$uploadedFile = CUploadedFile::getInstance($model, 'image');

所以你的最终代码如下:

$post = Yii::app()->request->getPost('Test');    

if ($post) { 
    $model->attributes = $post;
    $uploadedFile = CUploadedFile::getInstance($model, 'image');

    if ($uploadedFile) {
       $imageName = date("Y_m_d_H_i_s").$uploadedFile->name;
       $model->image = $imageName;

       if ($model->save()) {
           $uploadedFile->saveAs(Yii::getPathOfAlias('webroot').'/imagefolder/'.$imageName );
       }
    }

答案 2 :(得分:0)

作为一种选择,您可以&#34;硬编码&#34;表单中的文件属性。只是:

<input type="file" id="yourid" name="yourname" />

然后在您正在解析POST数据的YourController中,您可以直接访问$ _FILES [&#39; yourname&#39;]。

不是一种优雅的方式,而是简单而快速。

P.S。:如果你在视图中使用$ this-&gt; beginWidget,那么你应该添加参数

$this->beginWidget('CActiveForm', array(
    ...
    'htmlOptions'=>array(
        'enctype'=>'multipart/form-data'
    ),
));