Загрузка нескольких файлов на сервер и запись в БД

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
xurma2
Сообщения: 27
Зарегистрирован: 2015.01.18, 19:22

Загрузка нескольких файлов на сервер и запись в БД

Сообщение xurma2 »

Как загрузить несколько файлов на сервер и сделать запись в БД что бы в одну строчку записать все пути к файлам (скажем через запятую).

Код: Выделить всё

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

    <?= $form->field($model, 'photo[]')->fileInput(['multiple' => true]) ?>

    <button>Submit</button>

<?php ActiveForm::end(); ?>

Код: Выделить всё


class Photo extends Model
{
    /**
     * @var UploadedFile|Null file attribute
     */
    public $photo;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['photo'], 'file', 'maxFiles' => 10], // <--- here!
        ];
    }
}

Код: Выделить всё

    public function actionPhoto(){

        $model = new Photo();

        if (Yii::$app->request->isPost) {
            $model->photo = UploadedFile::getInstances($model, 'photo');

            if ($model->photo && $model->validate()) {
                foreach ($model->photo as $photo) {
                    $photo->saveAs('uploads/' . $photo->baseName . '.' . $photo->extension);
                }
            }
        }

        return $this->render('photo', ['model' => $model]);
    }
У меня вот так. Но это не 15 инпутов а только один в который можно загрузить несколько. Я так думаю их надо как то объеденять (всымсле пути) ничего не нашел по теме. Нужно сделать без модулей, самому, это тестовое задание.

Спасибо за помощь
xurma2
Сообщения: 27
Зарегистрирован: 2015.01.18, 19:22

Re: Загрузка нескольких файлов на сервер и запись в БД

Сообщение xurma2 »

Пытаюсь как то сохранять но пишет такую ошибку. Почему не срабатывает?

Calling unknown method: yii\web\UploadedFile::formName()
Trueman
Сообщения: 23
Зарегистрирован: 2016.10.22, 15:46

Re: Загрузка нескольких файлов на сервер и запись в БД

Сообщение Trueman »

Присоединяюсь к вопросу, как при использовании multiple upload записать пути в ячейку БД
dva20
Сообщения: 17
Зарегистрирован: 2016.12.13, 19:34

Re: Загрузка нескольких файлов на сервер и запись в БД

Сообщение dva20 »

Если правильно понял, то самое простое, наверное, это внутри цикла

Код: Выделить всё

foreach ($model->photo as $photo) {
   $photo->saveAs('uploads/' . $photo->baseName . '.' . $photo->extension);
}
 
собрать массив строк/путей к файлам которые потом прогнать через функцию implode() для получения строки с разделителем. Затем, после цикла создать новую модель типа ActiveRecord и сохранить эту запись в БД.
Matvik
Сообщения: 194
Зарегистрирован: 2013.06.21, 02:32

Re: Загрузка нескольких файлов на сервер и запись в БД

Сообщение Matvik »

Добавлю, что хранить в одной ячейке БД несколько сущностей противоречит основным принципам проэктирования БД. Если у нас, например, есть товар, и к нему есть несколько картинок, то пути к картинкам нужно хранить в отдельной таблице, которая имеет связь с товарами через "многие к одному", по одной строке на каждую картинку.
Аватара пользователя
Said
Сообщения: 138
Зарегистрирован: 2015.06.04, 10:16

Re: Загрузка нескольких файлов на сервер и запись в БД

Сообщение Said »

если будете хранить вс пути в одном поле то лучше храните в виде json и лучшее не полный пути только уникальные имя файлов (guid) или же храните все фалы а архиве и у вас будет 1 zip файл всегда
Ответить