Как загружать несколько разных файлов за раз, при этом получая их имена в yii2?
У меня есть приложение yii2(страница), на которую я хочу выводить некоторое записанное событие через видео и гиф-анимацию одинакового содержания(слева видео, справа аналогичная гиф), чтобы они были синхронизированы. Для хранения таких событий я использую бд, со следующей структурой:
- id:int
- date:date
- videoname:string
- gifname:string
Добавляю записи в таблицу с помощью формы следующего вида:
- дата: textField
- видео-файл: fileInput
- гиф-файл: fileInput
Также у меня есть модель загрузки файла:
class UploadForm extends Model
{
/**
* @var UploadedFile
*/
public $imageFile;
public function rules()
{
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'mp4, webm, gif, png, jpg'],
];
}
public function upload()
{
if ($this->validate()) {
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
return ($this->imageFile->baseName . '.' . $this->imageFile->extension);
} else {
return null;
}
}
}
Далее в контроллере я пытаюсь получать имя загружаемого файла и передавать его в videoname и gifname, чтобы в дальнейшем выводить на страницу по имени.
$file = new UploadForm();
$model = new Interest();
if ($this->request->isPost) {
$file->imageFile = UploadedFile::getInstance($file, 'imageFile');
if ($file->upload()) {
echo "File uploading complete";
}
}
if ($this->request->isPost) {
if ($model->load($this->request->post())) {
$model->filename = $file->imageFile->baseName.'.'.$file->imageFile->extension; //<= тут передаю имя файла в бд
if ($model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
}
} else {
$model->loadDefaultValues();
}
Когда я пытаюсь сделать такое с одним файлом все получается, но с двумя же мне приходится создавать в контроллере несколько экземпляров класса UploadForm и это перестает работать, либо загружается последний из файлов, либо вовсе выдает ошибки.
Хотел узнать, как это правильно делать?
Знаю про вариант загрузки нескольких файлов с помощью 'multiple' => true, но не понимаю как в этом случае получать имена каждого конкретного загружаемого файла.