gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Какой самый быстрый способ настроить галлереи с загрузкой и пережатием картинок?

В каком бы фреймворке я не брался за эту операцию - она всегда занимает время от суток и более.

1. надо подключить какой-нибудь glide, чтобы поддерживались пресеты, ведь картинки удобно тянуть по коллекции, а внутри коллекции удобно иметь несколько пресетов по размерам + бизнес-логике. Или подрубать intervention/image и писать собственную обертку.
2. надо подключить какой-нибудь flysystem и настроить его в папку, чтобы позже переключить на амазон например (это хорошо, что он есть, а так бы еще виртуальную ФС пришлось писать)
3. надо написать класс, который поддерживает выборку картинок по конкретным моделям и айди из базы данных, а значит надо туда пхать методы персиста что-то вроде "добавь десять картинок и создай для них записи в таблице images"
4. надо убедится что при повторной загрузке картинки если md5_file отличается, а имя - нет - файл будет "обновлен" (читай, записан в папку сорцев, потом пережат в папку кешей, потом обновлен в базе данных, потом заброшен в свойство модельки-сущности)
5. надо придумать какую-то систему удаления, позволяющую этими картинками управлять, и это ещё не админка, а просто хотя бы методы позволяющие удалить как фотку по пути, так и фотку по модели/коллекции, и конечно систему очистки кеша для пресетов тоже.
6. придумать какую-то систему отдачи картинок по урлу, хотя можно использовать стандартный генерируемый от glide, но он там жутко сео-некрасивый, и к тому же при сохранении фоток их как правило переименовывают в uniqid() чтобы если человек будет вторую грузить - не вышел конфликт по типу одна пропала

и этих пунктов может быть еще штук 5.

Без фреймворка сделать вышеуказанное - ну сутки занимает минимум, может я плохой кодер, иначе косячно получается и неудобно.

Я пробовал сие на ларавеле сделать, учитывая что там есть Storage но по сути это тот же Flysystem, ещё и со своими приколами. И все равно нужен intervention/image, поддержка коллекций, в каждой коллекции - пресеты - и снова пишем с нуля.

Я пробовал сделать это в симфони. Пакет Liip выглядит как готовый из коробки, но боже я как вспомню настройку этого дредноута исключительно при помощи конфига, все эти пресеты, коллекции, пережималки, фильтры... навевает печаль. В коде хоть и немного дольше, зато не надо думать "а что тут вообще можно писать".

Может есть у кого или решение, или по пунктам план, как такую задачу если что сделать минимальными усилиями? Есть ли у кого практический опыт использования для хранилища картинок например Symfony\Cache вместо БД. Ведь 90% всех обращений будут либо "дай мне фотки по айди модельки" либо "обнови фотки в модельке" + методы-пачки для нескольких, может ну его нафиг хранение этого в бд, написание связей и вся эта боль может уместится в одном классе из пары методов типа upload -> process -> persist -> get?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 3
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Реализация подобных задач может отличатся в зависимости от требований конкретного приложения, поэтому создание подобного универсального пакета довольно проблематично и не оправдано т.к. на выходе получаем монолит с несколькими зависимостями.
Пакет Liip выглядит как готовый из коробки, но боже я как вспомню настройку этого дредноута исключительно при помощи конфига, все эти пресеты, коллекции, пережималки, фильтры... навевает печаль.
это как раз и есть побочный эффект "универсальности", кроме того никто не мешает создать шаблон конфигурации или инструмент развертывания.

Подобных решений масса причем под любой фреймворк, например, один из пакетов для yii2 + примеры работы с файлами В общем packagist/github в помощь.
Ответ написан
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Сделать несколько своих пакетов либо написать самому. Кэш, хранилище, работа с картинками. Под разные проекты и задачи (разные наборы модулей) пишем адаптеры, наверное ещё какой то конфиг свой не помешал бы, тут можно ни одного пакета не писать самому. Взять кучу подобных и на собирать. Точно бы не стал писать сам intervention/image, хотя писал, задач всяких разных много, а всего сразу не предусмотреть. Зависимость от модели или бд тут лишнее, это можно получить в методе модели из хранилища например
Ответ написан
Комментировать
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Сделать один раз свою либу и подключать её во все проекты.
Причём делать в соответствии с SOLID, то есть чтобы не приходилось конфигурировать 100500 параметров, а правки делались путем модификации вызывающего кода.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы