2017-01-24 4 views
0

Я пытаюсь загрузить несколько файлов с помощью функции перетаскивания. Я получил массив в то время как нажать на Save(), но она не в состоянии загрузить его бросает:Не удалось загрузить мутированное изображение с помощью kartik fileinput в yii2

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

Изменение yo Ур:

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

к:

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

И внутри использования петли $file вместо $modelalbummedia->albummediaFile

Скопировать код & паста:

$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

Я редактировал свой код, как описано выше см , Теперь он покажет мне ошибку: ** Неопределенное смещение: 0 ** – Akkie

+0

Прежде всего, вы все еще используете внутри цикла '$ modelalbummedia-> albummediaFile'. Second: 'if ($ _ FILES ['albummediaFile'] ['name'] [0]! =" ") {' Эта строка вызывает исключение, так как u не отправляет файлы. Измените его на 'if ($ modelalbummedia-> albummediaFile) {' и перестань использовать '$ _FILES' напрямую. – Yupik

+0

@Akkie обновленный ответ, пожалуйста, прочитайте его внимательно, не просто вставляйте и забывайте. – Yupik