2015-04-21 131 views
2

我按照以下指南https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md,但没有文件上传。下面是我的配置yii2文件上传不起作用

_form

这是一个循环,所以我可以得到不同的记录数组。

<?= $form->field(new UploadForm , "[$count]file")->fileInput()->label(false) ?> 

视图

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>... 

控制器

if(isset(Yii::$app->request->post()['Factsheets'])){ 

       for($i=0 ; $i < count(Yii::$app->request->post()['Factsheets']); $i++) { 
        //Yii::error(print_r(Yii::$app->request->post()['Factsheets'][$i],true)); 

        if(!empty(Yii::$app->request->post()['UploadForm'][$i]['file'])){ 
         $file = new UploadForm(); 
         $file->file = UploadedFile::getInstance(Yii::$app->request->post()['UploadForm'][$i], 'file'); 

         if ($file->file && $file->validate()) { 
          $file->file->saveAs('uploads/' . $file->file->baseName . '.' . $file->file->extension); 
         } 
        } 
       }    
      } 

交日志

[Factsheets] => Array 
    (
     [0] => Array 
      (
       [type] => image 
       [factsheet_id] => 1185 
       [path] => ../public/filespool/2/289/Pelotas_Reprocessing.jpg 
      ) 

     [1] => Array 
      (
       [type] => tech_paper 
       [factsheet_id] => 1433 
       [path] => ?basin=pelotas 
      ) 

     [2] => Array 
      (
       [type] => factsheet 
       [factsheet_id] => 1844 
       [path] => ../public/filespool/2/289/Pelotas_Reprocessing.pdf 
      ) 

    ) 

[UploadForm] => Array 
    (
     [0] => Array 
      (
       [file] => 
      ) 

     [1] => Array 
      (
       [file] => 
      ) 

     [2] => Array 
      (
       [file] => 
      ) 

    ) 

我在注册日志中注意到了以下内容。我如何构建它?

$_FILES = [ 
    'UploadForm' => [ 
     'name' => [ 
      0 => [ 
       'file' => 'Destin_Dome.jpg' 
      ] 
      1 => [ 
       'file' => '' 
      ] 
      2 => [ 
       'file' => 'Pelotas_Reprocessing.pdf' 
      ] 
     ] 
     'type' => [ 
      0 => [ 
       'file' => 'image/jpeg' 
      ] 
      1 => [ 
       'file' => '' 
      ] 
      2 => [ 
       'file' => '' 
      ] 
     ] 
     'tmp_name' => [ 
      0 => [ 
       'file' => '/tmp/phpoPgbJ9' 
      ] 
      1 => [ 
       'file' => '' 
      ] 
      2 => [ 
       'file' => '' 
      ] 
     ] 
     'error' => [ 
      0 => [ 
       'file' => 0 
      ] 
      1 => [ 
       'file' => 4 
      ] 
      2 => [ 
       'file' => 1 
      ] 
     ] 
     'size' => [ 
      0 => [ 
       'file' => 1129373 
      ] 
      1 => [ 
       'file' => 0 
      ] 
      2 => [ 
       'file' => 0 
      ] 
     ] 
    ] 
] 

现在看来似乎是验证失败,但是我能做出这样的副本:

if(!empty($_FILES['UploadForm']['tmp_name']['file'])){ 
         copy($_FILES['UploadForm']['tmp_name']['file'],"/tmp/".$_FILES['UploadForm']['name']['file']); 
} 

的FileUpload模型

public $file; 
    public $image; 
    public $factsheet; 


    /** 
    * @return array the validation rules. 
    */ 
    public function rules() 
    { 
     return [ 
      [['file'], 'file','maxFiles' => 10], 
      [['image'], 'file','extensions' => 'gif, jpg'], 
      [['factsheet'], 'file','checkExtensionByMimeType' => false,'extensions' => 'pdf'], 
     ]; 
    } 

回答

1

我可能是错的,但我认为这个问题是在您的控制器中:您的模型规则也适用于多个文件上传和您的表单字段,但在控制器中,您将$model->file设置为单个UploadedFile实例。这就是为什么你的验证不起作用。我不能给你的建议(改变控制器或模型规则),因为我不清楚你在这里做什么。它看起来像你从单个文件上传字段创建多个模型...

+0

我想上传多个文件 – shorif2000