0

我试图在 CActiveForm 中包含 yii 的 xupload 扩展我尝试遵循这个http://www.yiiframework.com/wiki/395/additional-form-data-with-xupload/ 但是我做不到。我有一个包含用户名和文件名字段的表单(允许用户上传并从视图中查看。)这是我的视图

<?php
$form = $this->beginWidget('CActiveForm', array(
      'id' => 'form-form',
      'enableAjaxValidation' => false,
        //This is very important when uploading files
      'htmlOptions' => array('enctype' => 'multipart/form-data'),
    ));
  ?>    
    <div class="row">
        <?php echo $form->labelEx($model,'username'); ?>
        <?php echo $form->textField($model,'username'); ?>
        <?php echo $form->error($model,'username'); ?>
    </div>
    <!-- Other Fields... -->
    <div class="row">
        <?php echo $form->labelEx($model,'attachment_photo'); ?>
        <?php
    $this->widget('xupload.XUpload', array(
        'url' => Yii::app()->createUrl("form/uploadAdditional", array("parent_id" => 1)),
        'model' => $model,//An instance of our model
        'attribute' => 'file',
        'multiple' => true,
        //Our custom upload template
        'uploadView' => 'application.views.site.upload',
        //our custom download template
        'downloadView' => 'application.views.site.download',
        'options' => array(//Additional javascript options
            //This is the submit callback that will gather
            //the additional data  corresponding to the current file
            'submit' => "js:function (e, data) {
                var inputs = data.context.find(':input');
                data.formData = inputs.serializeArray();
                return true;
            }"
        ),
    ));
    ?>
4

3 回答 3

0

重要的是你的 $_POST 数组是什么样子的。(使用 Firebug 或 Fiddler 进行检查)。

您的 $_POST 应该如下所示:

array (
  'form-form' => array ( /* stuff for additional form data */)),
  'XupLoad' => array ( /* stuff pertaining to XuLoad */)),
)

这样,附加的表单数据与 XupLoad 数据是分开的。Xupload 扩展中包含的操作处理$_POST['XupLoad']数组的一部分。您将不得不编写代码来处理$_POST['form-form']数组的一部分。

顺便说一句,Blueimp 的 jQuery File Upload 有一个新版本,其中包含重要的改进和错误修复。XupLoad 扩展似乎不包含这个最新版本。

我建议使用 Blueimp 的最新版本。它有一个 UploadHandler 类,负责处理服务器端的所有事情。最新版写的真好。您仍然需要添加代码来处理额外的表单数据......

事后思考:看起来你正在嵌套你的小部件。我不确定这是否可行。检查浏览器中的页面源。确保生成的 HTML 是正确的。可能是您正在生成嵌套表单,我对这些表单如何工作表示怀疑。

于 2012-12-16T08:00:57.800 回答
0

这是我的现场测试站点。http://vincentlkl.allalla.com/我已经将表格编码为 mulitpart

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

)); ?>

/文件上传小部件/

<?php $this->widget('bootstrap.widgets.TbFileUpload', array(
'url' => Yii::app()->createUrl("form/upload"),
        'model' => $model,
        'attribute' => 'file',
        'multiple' => true,
        'options' => array(
            'maxFileSize' => 3000000,
            'acceptFileTypes' => "js:/(\.|\/)(jpe?g|png)$/i",
        )

));
 ?>

当它在表单中时,我无法上传文件。

于 2012-12-18T08:25:32.233 回答
0

暂时忘记您正在调用的小部件。下面是应该生成的 HTML 示例,以便将 jQuery FileUpload 与其他表单字段结合起来:

<!-- The file upload form used as target for the file upload widget -->
<form id="fileupload" action="" method="POST" enctype="multipart/form-data">
        <input name="Input_upload[titleInArchive]" id="Input_upload_titleInArchive" type="text" />   

    <div class="row fileupload-buttonbar">
        <div class="span7">
            <!-- The fileinput-button span is used to style the file input field as button -->
            <span class="btn btn-success fileinput-button">
                <i class="icon-plus icon-white"></i>
                <span>Add files...</span>
                <input type="file" name="files[]" multiple>
            </span>
            <button type="submit" class="btn btn-primary start">
                <i class="icon-upload icon-white"></i>
                <span>Start upload</span>
            </button>
    <!-- the rest of the demo jQuery File upload page ... -->
</form>

此表单有一个输入字段titleInArchive,它与 jQuery File Upload 表单共存。位于<input>jQuery File Upload 标签内。所以在你的情况下,你会把 extra 放在<input>里面$this->widget('xupload.XUpload', ...)

完成此操作后,点击开始上传按钮。在 Firebug 中,检查 XHR 请求。$_POST 数组是什么样的?在您的情况下,它应该类似于

$_POST['Form']['username'] ...
$_POST['Form']['identity_card'] ...    

我希望我是有道理的......

于 2012-12-18T09:23:44.803 回答