2015-08-26 25 views
7

Yii framework 2.0 ile çalışma Birden çok dosya yüklemek istiyorum. Aşağıdaki Yii 2 documentation, alt kısımda Upload Multiple Files Aşağıdaki modele sahibim. ( )Yii framework 2.0 kullanarak birden fazla dosya nasıl yüklenir

<?php use yii\widgets\ActiveForm; ?> 

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

<?= $form->field($model, 'attachment_file[]')->fileInput(['multiple' => true,]) ?> 

<button>Submit</button> 

<?php ActiveForm::end() ?> 

Denetleyicimde aşağıdaki kod parçacığım var. Ben bir giriş dosyası elemanı ile birden fazla dosya seçebilirsiniz bekliyoruz her şeyden kod ile

if (Yii::$app->request->isPost) { 
     $model->attachment_file = UploadedFile::getInstances($model, 'attachment_file'); 
     if ($model->upload()) { 
      die(); 
      // file is uploaded successfully 
      return; 
     } 
} 

. Ama beklediğim gibi değil. Aynı girdi dosyası elemanına sahip birden fazla dosya seçtiğimde ve Gönder düğmesine bastığımda sadece son seçilen dosyayı gördüm. Bu yüzden ne yaptığım hakkında şüphe etmeye başladım. Yanlış bir şey mi yaptım? Veya giriş dosyası elemanını bir defaya mahsus olmak üzere, bir yükleme dosyası için bir adet giriş dosyası elemanı eklemem gerekiyor mu?

cevap

6

ne denedim bakınız: görünümü kod denetleyici içinde

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

    <?= $form->field($uploadForm, 'files[]')->fileInput(['multiple' => true]) ?> 

    <button class="btn btn-primary">Upload</button> 
    <?php ActiveForm::end() ?> 

use yii\web\UploadedFile; 
    use app\models\MultipleUploadForm; 
    use app\models\ProductImage; 
    ....... 
    function actionUploadImage() { 
     $form = new MultipleUploadForm(); 

     if (Yii::$app->request->isPost) { 
      $form->files = UploadedFile::getInstances($form, 'files'); 

      if ($form->files && $form->validate()) { 
       foreach ($form->files as $file) { 
        $image = new ProductImage(); 
        if ($image->save()) { 
         $file->saveAs($image->getPath()); 
        } 
       } 

      } 
     } 

     return $this->render('uploadImage', [ 
      'uploadForm' => $form, 
     ]); 
    } 

MultipleUploadForm modeli

use yii\base\Model; 
use yii\web\UploadedFile; 

class MultipleUploadForm extends Model 
{ 
    /** 
    * @var UploadedFile[] files uploaded 
    */ 
    public $files; 

    /** 
    * @return array the validation rules. 
    */ 
    public function rules() 
    { 
     return [ 
     [['files'], 'file', 'extensions' => 'jpg', 'mimeTypes' => 'image/jpeg', 'maxFiles' => 10, 'skipOnEmpty' => false], 
     ]; 
    } 
} 

Bu kod benim için çalışıyor. Umarım bu senin için de çalışır.

+0

Kodunuzu denedim. Öncelikle, Dosyaları Seç düğmesini tıklattığımda ve bir dosyayı birkaç kez seçtiğimde yalnızca son seçilen dosyayı gördüğümü not aldım. İkincisi, denetleyicinizin foreach döngüsünde $ dosya değişkeni ekledim, Yükle düğmesine bastığımda son seçilen dosyanın sadece bir yii \ web \ UploadedFile Nesnesini görüyorum. Lütfen birden fazla dosya ne zaman yüklediğini söyle. Veya giriş dosyasını birkaç kez eklemem gerekir mi? –

+0

Kod, form sonrası verilerinin hatalarını ayıklamak için projemde kullandığım şeyi tamamlıyor. – ankitr

İlgili konular