2017-01-24 6 views
0

ドラッグアンドドロップ機能を使用して複数のファイルをアップロードしようとしています。私は(保存をクリックしながら、配列を得た)が、それはスローアップロードすることができません:yii2でkartik fileinputを使用して複数の画像をアップロードできません

Call to a member function SaveAs() on array

_form.php

<?php 

use yii\helpers\Html; 
use yii\widgets\ActiveForm; 
use backend\models\Users; 
use yii\helpers\Arrayhelper; 
use kartik\file\FileInput; 
use yii\web\UploadedFile; 
use yii\helpers\Url; 

?> 

<div class="album-form"> 

    <?php $form = ActiveForm::begin([ 
      'options' => ['enctype' => 'multipart/form-data'], 
      'id' => $model->formName(), 
      'enableAjaxValidation' => true, 

     ]); ?> 

<?php echo FileInput::widget([ 
      'name' => 'albummediaFile[]', 
      'options'=>[ 
       'multiple'=>true, 
      ], 
      'pluginOptions' => [ 
       'maxFileCount' => 10, 
       'showUpload' => false, 
       'maxFileSize'=>2000, 
       'allowedFileExtensions' => ['jpg', 'png','jpeg'], 
      ] 
     ]); 
    ?> 

AlbumController.php(コントローラ)

public function actionCreate() 
    { 
     $model = new Album(); 
     $modelalbummedia = new Albummedia(); 


     if ($model->load(Yii::$app->request->post())) { 


      $modelalbummedia->albummediaFile = UploadedFile::getInstances($modelalbummedia, 'albummediaFile'); 

        if ($modelalbummedia->upload()) { 

         return; 
        } 
         $modelalbummedia->save(); 
        } 


      $model->save(); 

      return $this->redirect(['view', 'id' => $model->albumID]); 
      } else { 
       return $this->render('create', [ 
        'model' => $model, 
        'modelalbummedia' => $modelalbummedia, 
       ]); 
      } 

    } 

Albummedia .php(モデル)

public function upload() 
    { 
     if ($this->validate()) { 
      foreach ($this->albummediaFile as $file) { 
       $file->saveAs('uploads/Album_Media/' . $file->baseName . '.' . $file->extension); 

       $model->albummediaFile = $_FILES['albummediaFile']; **Not getting file name here. 
      } 
      return true; 
     } else { 
      return false; 
     } 
    } 

答えて

0

ウル:なるほど、上記のように私のコードを編集した

$modelalbummedia->albummediaFile = UploadedFile::getInstances($modelalbummedia, 'albummediaFile'); 
    if($modelalbummedia->albummediaFile){ 
     foreach($modelalbummedia->albummediaFile as $file){ 
      $imagepath = 'uploads/Album_Media/'; 
      $random_value = rand(000,999).time(); 
      $file->SaveAs($imagepath.$random_value.$file->baseName); 
      $file = $random_value.$file->baseName; 
     } 
     $modelalbummedia->save(); 
    } 
+0

:代わりに$modelalbummedia->albummediaFile

コピー&貼り付けコードの

foreach($modelalbummedia->albummediaFile as $file) { 

そして、ループを使用$file内側:へ

for($i=0;$i<count($_FILES['albummediaFile']['name']);$i++){ 

。今度は私にエラーが表示されます:**未定義オフセット:0 ** – Akkie

+0

まず最初に、 '$ modelalbummedia-> albummediaFile'をループ内で使用します。 2番目の: 'if($ _FILES ['albummediaFile'] ['name'] [0]!=" "){'この行は例外をスローします。それを 'if($ modelalbummedia-> albummediaFile){'に変更し、 '$ _FILES'の使用を直ちに止めてください。 – Yupik

+0

@Akkieの更新された回答は、慎重に読んでください。 – Yupik

関連する問題