在yii中的CUploadedFile

时间:2015-05-21 16:23:02

标签: php yii

我的问题是两个或更多文件。 该代码是Yii应用程序开发食谱(第2版),第4章 我使用Yii 1.1.14

控制器:

<?php
class UploadController extends Controller
{
    function actionIndex()
    {
        $dir = Yii::getPathOfAlias('application.uploads');
        $uploaded = false;
        $model=new Upload();
        if(isset($_POST['Upload']))
        {
            $model->attributes=$_POST['Upload'];
            $files=CUploadedFile::getInstances($model,'file');
            if($model->validate()){
                foreach($files as $file)
                    $file->saveAs($dir.'/'.$file->getName());
            }
        }
        $this->render('index', array(
            'model' => $model,
            'dir' => $dir,
        ));
    }
}

模型:

<?php
class Upload extends CFormModel
{
    public $file;
    public function rules()
    {
        return [
            ['file', 'file', 'types'=>'jpg'],
        ];
    }
}

视图:

<?php if($uploaded):?>
<p>File was uploaded. Check <?php echo $dir?>.</p>
<?php endif ?>
<?php echo CHtml::beginForm('','post',array('enctype'=>'multipart/form-  data'))?>
    <?php echo CHtml::error($model, 'file')?>
    <?php echo CHtml::activeFileField($model, "[0]file")?>
    <?php echo CHtml::activeFileField($model, "[1]file")?>
    <?php echo CHtml::submitButton('Upload')?>
<?php echo CHtml::endForm()?>
请帮助我

1 个答案:

答案 0 :(得分:2)

  1. 您应该修改表单enctype,使用multipart/form-data代替multipart/form- data

  2. 您可以使用CMultiFileUpload

  3. 控制器:

    $images = CUploadedFile::getInstancesByName('image');
    foreach ($images as $image => $pic) {
    }
    

    视图:

    $this->widget('CMultiFileUpload', array(
        'name' => 'image',
        'accept' => 'jpeg|jpg|gif|png',
        'duplicate' => 'Duplicate file!',
        'denied' => 'Invalid file type',
    ));
    

    如果您需要验证才能正常使用多文件上传,请添加到模型'maxFiles'参数。

    public function rules()
    {
        return array(
            array('image', 'file', 'types'=>'jpg,gif,png', 'maxSize'=>'204800', 'allowEmpty'=>true, 'maxFiles'=>4),
        );
    }