Как подружить 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.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 4

      +1
      Окей, вы вот написали бандл, и что дальше? Было бы интересно узнать, например, какие были трудности, что и как пришлось реализовать, какие были интересные решения, а так получается, что вы просто свой бандл по сути рекламируете, даже особо не объясняя, в чем его прелесть и как им пользоваться.
        +2
        По порядку)

        Окей, вы вот написали бандл, и что дальше?

        Давайте будем им пользоваться и не будем писать новый велосипед.

        Какие были трудности

        Трудностей не было если вы опытный php разработчик и работаете c Symfony несколько лет, то странно если будет какая либо сложность в написании подобного функционала.

        A так получается, что вы просто свой бандл по сути рекламируете

        Так и есть. Просто когда я искал подобное решение я ничего не нашел. И решил что б если у кого-то появится подобная задача и он загуглил решение в интернете то мог бы легко найти данную статью и решить свою проблему не писав того что уже написано.

        даже особо не объясняя, в чем его прелесть и как им пользоваться.

        В статье есть ссылка на документацию где подробно написано как им пользоваться. Я подумал что не стоит дублировать документацию в статью.

        Не совсем понимаю вашу критику.
        0
        Я бы еще исправил:
        "bukashk0zzz/liip-imagine-serialization-bundle": "dev-master",

        на
        "bukashk0zzz/liip-imagine-serialization-bundle": "v1.0.1",

        В документации на главной репы.
          0
          Выглядит не плохо, спасибо! Я в свое время писал, что-то подобное: Listener, Annotation

          Only users with full accounts can post comments. Log in, please.