Як подружити JMS Serializer і LiipImagineBundle

Я зараз займаюся написанням 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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.