【问题标题】:Yii file field posting empty valuesYii 文件字段发布空值
【发布时间】:2014-11-24 03:09:50
【问题描述】:

我是 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(); ?>

任何帮助将不胜感激。因为在这一点上我真的很沮丧。

【问题讨论】:

    标签: php yii


    【解决方案1】:

    如果你只是 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 );
           }
        }
    

    【讨论】:

    • 非常感谢您的回答,它工作得很好。虽然我在学习如何在 Yii 中使用多重上传时也遇到了问题
    【解决方案2】:

    我认为你应该使用 $_FILES['image'] 而不是 $model->image。

    【讨论】:

    • 感谢 Navneet 的回复,我试过了。但效果不佳。
    【解决方案3】:

    作为一个选项,您可以在表单中“硬编码”文件属性。只是:

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

    然后在 YourController 中解析 POST 数据,您可以直接访问 $_FILES['yourname']。

    不是一种优雅的方式,但简单快捷。

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多