Intereting Posts
Как получить вложенный список HTML из набора записей массива объектов? Как перенаправить на ту же страницу в PHP Когда я создаю zip-файл каталога с большим zip-файлом в PHP, я сталкиваюсь с ограничением памяти Looping через MySQL левое соединение в php против 2 отдельных запросов Что означает синтаксис PHP $ var1 -> $ var2? Отобразить представление в PHP Проверьте, имеет ли строка только целые числа, разделенные запятой в PHP как выполнить php-код в javascript MYSQL PHP Нет выбранной базы данных – не удается найти ошибку Месяцы не отображаются корректно с помощью php Разрешить пользователям загружать вход, который они отправили каждый час? MySQL выдает подключение к сайту с php Вспомогательный массив в массиве PHP Как загрузить файл вида из другого представления с помощью Codeigniter БЕЗ необходимости проходить через контроллер? Изменение имен позиций корзины WooCommerce

Как загрузить несколько файлов с помощью Yii framework 2.0

Работа с Yii framework 2.0 Я хочу иметь возможность загружать несколько файлов. После документации Yii 2 в подразделе « Upload Multiple Files меня есть следующая модель.

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

Со всем кодом выше я ожидаю, что я могу выбрать несколько файлов с одним элементом входного файла. Но это не то, что я ожидаю. Когда я выбираю несколько файлов с одним и тем же элементом входного файла и нажимаю «Отправить», я видел только последний выбранный файл. Поэтому у меня возникают сомнения в том, что я делаю. Я сделал что-то неправильно? Или мне нужно добавить элемент входного файла несколько раз, один элемент входного файла для одного загружаемого файла?

Посмотрите, что я пробовал: посмотреть код

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

Этот код работает для меня. Надеюсь, это сработает и для вас.