Yii - 带有CMultiFileUpload的表单不会提交文件

时间:2013-07-31 16:04:06

标签: file upload yii submit

我需要一些有点奇怪问题的帮助。 我的问题是,当使用CMultiFileUpload时,提交按钮不会向控制器提交文件。

我有一个非常简单的视图来上传多个文件:

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

<div class="row">
    <?php echo $form->labelEx($model,'sourceCode'); ?>   
    <?php
        $this->widget('CMultiFileUpload', array(
            'model'=>$model,
            'name' => 'sourceCode',
            'attribute'=> 'sourceCode',
            'max'=>5,
            'accept' =>'zip',
            'duplicate' => 'Duplicate file!', 
            'denied' => 'Invalid file type',));  
     echo $form->error($model,'sourceCode');?>  
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget();?>

这是我的模特:

class UploadSolutionForm extends CFormModel
{

public $sourceCode;

public function rules()
{
    return array(
        array('sourceCode', 'file', 'types'=>'zip', 'allowEmpty'=>false, 'wrongType'=>'Only .zip files allowed'),
    );
}

public function attributeLabels()
{
    return array(
            'sourceCode' => 'Uploaded file',
    );
}
}

这可能是有史以来最简单的行动:

public function actionUpload()
{

    $model = new UploadSolutionForm();

    if(isset($_POST['UploadSolutionForm']))
    {
        echo 'Got it!';
    }

    $this->render('solve',array('model'=>$model));
}

但是,当我点击提交时,它不会回显任何内容,但它会使用此代码(CMultiFileUpload替换为fileField):

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

<div class="row">
    <?php echo $form->labelEx($model, 'sourceCode');?>
    <br><?php echo $form->fileField($model, 'sourceCode');?>
    <?php echo $form->error($model, 'sourceCode');?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php 
$this->endWidget();?>

有人能告诉我什么是错的吗? 提前谢谢......

1 个答案:

答案 0 :(得分:0)

试试这个有效

在您的View文件中,在表单小部件中指定action属性,如下面的代码所示

<?php 
$form = $this->beginWidget(
    'CActiveForm',
    array(
        'id' => 'upload-form',
        'action'=>Yii::app()->createAbsoluteUrl('yourcontrollername/actionname'),
        'htmlOptions'=>array('enctype' => 'multipart/form-data'),
            ));?>

<div class="row">

   <?php $this->widget('CMultiFileUpload',array(
    'name'=>'files',
    'accept'=>'jpg|png',
    'max'=>3,
    'remove'=>Yii::t('ui','Remove'),
    //'denied'=>'', message that is displayed when a file type is not allowed
    //'duplicate'=>'', message that is displayed when a file appears twice
    'htmlOptions'=>array('size'=>25),
)); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget();?>

在yourController actionUplaod中,如下所示

public function actionUpload(){
        echo "hi";
        var_dump($_FILES['files']);
    }