Как стать автором
Обновить

Как подружить JMS Serializer и LiipImagineBundle

Время на прочтение2 мин
Количество просмотров4.1K
Я сейчас занимаюсь написанием API для front-end на AngularJS. Для этого я использую стандартную связку для Symfony:


У меня появилась задача отдавать ссылки на thumb и preview в объектах которые содержат картинки. Я уже использовал в коде LiipImagineBundle и для генерации ссылок в api тоже хотел использовать данный bundle. Проведя некий поиск нужного мне решения я удивился что нет никаких готовых bundlов для этого.

Сразу хочу сказать что я явно не фанат JMSSerializerBundle, так как проект активно не поддерживается что дает некие ограничения при работе с ним + он написан не совсем с учетом производительности. Symfony Serializer будет по лучше, но жизнь и не все так просто)

Также прошу заметить что API планируется быть открытым и ссылки на thumb должны быть присланы в ответе. Просто написать в доке используйте url http://example.com/resolver/filter/image/name.jpg для получения thumb не подходит, да и не красиво как то)

Вернемся к теме. Поняв что нужно писать свой велосипед я приступил к его написанию. Так как проект для которого он был нужен не маленький пришлось делать так что б поддерживалась разная конфигурация. К примеру у картинки может быть несколько фильтров а может и не быть. Так как я использую для загрузки всего на сервер VichUploaderBundle, то пришлось сделать генерацию ссылок с учетом того что сериализуемое поле может быть полем этого bundle.

В JMSSerializerBundle есть два события которые вызываются при сериализации объект serializer.pre_serialize и serializer.post_serialize которые я использовал.

  • serializer.pre_serialize Используется если нам нужно изменить какую-то информацию в объекте. Например было поле picture с ссылкой на оригинальную картинку, а нужно в место этого туда вставить ссылку на thumb.
  • serializer.post_serialize Используется если нужно добавить результату сериализации дополнительную информацию. Например есть поле image с ссылкой на оригинал картинки и его нельзя перезаписывать, так как оно уже где-то используется тогда мы можем добавить новое поле image_thumb к примеру и положить в него ссылку на thumb.

Документация по использованию bundla и сам bundle находятся на GitHub LiipImagineSerializationBundle.
Теги:
Хабы:
Всего голосов 11: ↑8 и ↓3+5
Комментарии4

Публикации

Истории

Работа

PHP программист
115 вакансий

Ближайшие события

Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
OTUS CONF: GameDev
Дата30 мая
Время19:00 – 20:30
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область