Как сделать работу с изображением в Yii2 логичной?
Добрый день
Есть много расширений для загрузки изображений в Yii2, но те, с которыми доводилось работать, предлагают ajax загрузку изображений. Это значит, что изображение будет загружено/удалено/заменено до того, как мы сохраняем запись в БД. То есть как бы изображение отдельно, модель отдельно.
Логика работы с остальными полями другая. Мы можем их менять сколько вздумается, но пока не нажали кнопку "сохранить" ничего не происходит. Хочется, чтобы с изображениями было так же, это логично с т.з. конечного пользователя.
Есть ли какие-то расширения, которые позволяют работать именно в таком ключе?
1. При создании нового объекта твоей модели записывай в кастомное свойство этой же модели имя темп папки. ( я беру в качестве имени таймстамп ).
2. В форме загружай эти фотки аяксом (любым удобным компонентом - я на пример юзаю 2amigos/yii2-file-upload-widge - ребята периодически его апдейтят ) в эту темп папку сколько душе угодно. ( как отправить имя темп папки твоей модели в этот аякс я обьяснять уже не буду. Прийдется подняпрячь извилины )
3. При сохранении модели ( точнее на афтерсейве ) идешь в эту папку ( свойство с ее именем остается в обьекте ) перебираешь все файлы ( можешь пережать и переложить их в спец путь @webroot/media/product/id/file_names.jpg - айдишник модели у тебя уже будет на этом этапе, можешь уже и в бд сохранить и т.д. )
4. Удаляешь темп папку
Для такого алгоритма подойдет полагаю любой компонент с аякс загрузкой. Суть в том чтобы перед загрузкой файлов создать и запомнить имя временной папки в модели, а при соханении модели, попасть в эту папку и делать с файлами в ней все что душе угодно.
ЗЫ и таки да AlikDex прав. готового ты мало чего найдешь. В этом и прелесть любого опенсорсного расширения/фреймворка. Ты всегда можешь "доработать напильником" и получить конкретное решение под твою конкретную задачу. Как например сделал для себя я и использую теперь практически в каждом своем проекте.
Нет такого расширения. Потому как оно бессмысленно. Подобный функционал создается буквально добавлением файлинпута в форму с последующей отправкой его содержимого вместе с остальными данными. Вам нужно, это найти библиотеку, которая сможет отразить на клинете содержимое этого файлинпута. Либо самому такую написать, это не сложно. В качестве небольшого но исчерпывающего мануала по работе с этим элементом формы на клиенте: https://developer.mozilla.org/ru/docs/Web/API/File...