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

今のところ、呼び出しているウィジェットのことは忘れてください。以下は、jQuery FileUpload を他のフォーム フィールドと組み合わせるために生成する必要がある HTML の例です。

<!-- 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>

このフォームには、jQuery ファイル アップロード フォームと共存する1 つの入力フィールドtitleInArchiveがあります。<input>、jQuery ファイル アップロード タグ内にあります。したがって、あなたの場合、余分な<input>ものを$this->widget('xupload.XUpload', ...)

これが完了したら、アップロードの開始ボタンを押します。Firebug で、XHR リクエストを確認します。$_POST 配列はどのように見えますか? あなたの場合、それは次のようなものでなければなりません

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

私が理にかなっていることを願っています...

于 2012-12-18T09:23:44.803 に答える
0

これは私のライブ テスト サイトです。http://vincentlkl.allalla.com/私がすでにマルチパートに enctype しているフォーム

<?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 に答える