Задать вопрос

Почему не загружаются все файлы если их «перетаскивать» по одному файлу в поле?

Имеется возможность прикреплять файлы к посту. Прикрепление осуществляется с помощью виджета https://github.com/kartik-v/yii2-widget-fileinput
Если выделить на компьютере несколько файлов и перетащить их в поле загрузки, то всё работает хорошо. Если же перетаскивать файлы по одному, то почему-то загружается только последний файл, остальные просто теряются. Почему так происходит и как исправить?
Сам порядок действий такой: заполняю нужные поля, перетаскиваю файлы, нажимаю кнопку save. (Сами файлы не нажимаю загрузить). Порядок такой, т.к. не хочу чтобы файлы загружались без созданного поста.
Код в контроллере:
public function actionCreate()
    {
        $model = new Article(); //Создаю модель поста
        $upload = new UploadForm(); // Создаю модель загрузки файлов

        if (Yii::$app->request->isPost) {
            $model->load(Yii::$app->request->post()); //Загружаю данные в модель
            if($model->save()){ 
                $upload->files = UploadedFile::getInstances($upload, 'files'); // Если модель сохранена, то загружаю файлы
                $upload->UploadOperation($model->id); //Сохраняю файлы, а так же для каждого файла создаю запись в таблицу
                return $this->redirect(['view', 'id' => $model->id]);
            }
        }
        return $this->render('create', compact('model','categories','upload'));
    }

Модель загрузки файлов:
public $files;
    public function rules()
    {
        return [
            [['files'], 'file', 'maxSize'=>8*1024*1024,'maxFiles' => 10],
        ];
    }
    public function UploadOperation($article_id){
         $user_id= Yii::$app->user->id;
        foreach ($this->files as $file) {
            $filename = $this->generateFilename($file); //Генерирую имя файла
            $file->saveAs($this->getFolder() . $filename); //Сохраняю файл

            $operation= new Uploads();  //Создаю запись в таблице бд
            $operation->user_id=$user_id;  //Кто загрузил файл
            $operation->article_id=$article_id; //К какому посту относится
            $operation->file=$filename; //Путь к файлу
            if($operation->validate()){
                $operation->save(false); //Сохраняю запись
            }
            else{
                unlink($this->getFolder().$filename); //Удаляю файл
                throw new ForbiddenHttpException('Wrong Upload');
            }
        }
    }
}

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

    <?= $form->field($model, 'content')->textarea(['rows' => 6]) ?> // Содержимое поста
<?= $form->field($upload, 'files[]')->widget(FileInput::className(), [  
        'language' => 'ru',
        'options' => ['multiple' => true],
        'pluginOptions' => ['uploadUrl' => Url::to(['Тут просто заглушка, т.к. файлы грузятся после создания поста'])] 
    ]); ?>
 <div class="form-group">
        <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>  //Кнопка для создания поста
    </div>
    <?php ActiveForm::end(); ?>
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы