2015-08-26 8 views
7

का उपयोग करके एकाधिक फ़ाइलों को अपलोड करने के लिए कैसे करें वाईआई फ्रेमवर्क 2.0 के साथ काम करना मैं कई फाइलें अपलोड करने में सक्षम होना चाहता हूं। उपखंड Upload Multiple Files के तहत, Yii 2 documentation के बाद, मेरे पास निम्न मॉडल है।वाईआई फ्रेमवर्क 2.0

class Newsletter extends \yii\db\ActiveRecord { 
    public $attachment_file; 

    public function rules() 
    { 
     return [ 
       [['attachment_file'], 'file', 'maxFiles' => 5], 
     ]; 
    } 

    public function upload() { 

     if ($this->validate()) { 
      foreach ($this->attachment_file as $file) { 
       echo '<pre>'; print_r($file); echo '</pre>'; 
      } 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

नीचे मेरा विचार है।

<?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() ?> 

मेरे नियंत्रक में मेरे पास निम्न कोड स्निपेट है।

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

उपर्युक्त सभी कोड के साथ मैं उम्मीद करता हूं कि मैं एक इनपुट फ़ाइल तत्व के साथ कई फाइलों का चयन कर सकता हूं। लेकिन यह मेरी अपेक्षा की तरह नहीं है। जब मैं एक ही इनपुट फ़ाइल तत्व के साथ एकाधिक फ़ाइलों का चयन करता हूं और सबमिट हिट करता हूं तो मैंने केवल अंतिम चयनित फ़ाइल देखी। इसलिए मुझे संदेह होना शुरू हो रहा है कि मैं क्या कर रहा हूं। क्या मैंने कुछ गलत किया था? या मुझे एक अपलोड फ़ाइल के लिए कई बार इनपुट फ़ाइल तत्व जोड़ने की आवश्यकता है, एक इनपुट फ़ाइल तत्व?

उत्तर

6

देखें कि मैं क्या करने की कोशिश की: दृश्य कोड

<?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 मॉडल

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], 
     ]; 
    } 
} 

इस कोड मेरे लिए काम कर रहा है। उम्मीद है कि यह आपके लिए भी काम करता है।

+0

मैंने आपके कोड का प्रयास किया है। सबसे पहले मैं ध्यान देता हूं कि जब मैं फ़ाइलें चुनें बटन पर क्लिक करता हूं और फ़ाइल को कई बार चुनता हूं तो मुझे केवल अंतिम चयनित फ़ाइल दिखाई देती है। दूसरा, मैं आपके कंट्रोलर के फ़ोरैच लूप के अंदर $ फ़ाइल वैरिएबल को प्रतिबिंबित करता हूं, जब मैं अपलोड बटन दबाता हूं तो मुझे अंतिम चयनित फ़ाइल का केवल एक yii \ web \ uploadedFile ऑब्जेक्ट दिखाई देता है। कृपया मुझे बताएं कि यह कई फाइलें कब अपलोड करता है। या मुझे इनपुट फ़ाइल को कई बार जोड़ने की ज़रूरत है? –

+0

कोड पूर्ण है जो मैं प्रोजेक्ट में उपयोग कर रहा हूं। फॉर्म पोस्ट डेटा डीबग करने के लिए। – ankitr

संबंधित मुद्दे