Комментарии 14
TL;DR Не используйте JMS Serializer
Подскажите альтернативы? И пару слов о том, чем он плох. Буду рад услышать. Спасибо.
Nilov_A, когда ожидается следующий материал?
Это удобно для очень простеньких проектиков. Описал мэппинги и все круто. Но как только задачи становятся посложнее мы даже заметить не успеем как у нас появится свой листенер который фиксит какой-нибудь баг.
Словом я использовал jms serializer с перерывами где-то 2 года, пока мне не надоело. В итоге на мэппинги я тратил примерно сктолько же времени сколько бы потратил напиши все руками. Причем частенько возникали проблемы при возникновении циклических ссылок на двусторонних связях в сущностях, чего можно было бы избежать явно подготовив данные.
А как только появляется необходимость суппортить несколько версий API — жизнь превращается в боль. И вот ты уже вынужден делать слой DTO между сущностями и сериализатором что бы все было хорошо. А при таком раскладе проще взять fractal какой и не париться.
Как альтернатива мне нравится symfony/serializer. Он использует намного более простой подход, используя php как промежуточный формат + нормализаторы. Это позволяет делать все тоже самое но намного проще и более гибко. Можно задавать свои нормализаторы для типов, все явно. Для простых проектов или при наличии DTO оно местами даже проще чем JMS.
На самом деле в Symfony нет ничего особенного. Во всяком случае в контексте топика (http api), тут любой фреймворк предоставляющий абстракцию от SAPI и имеющий нормальную реализацию IoC будет неплох. Для меня ключевым является Doctrine ORM, которая реально крутая штука и разбираясь в которой я постоянно испытывал восторг и восхищение. Правда опять же это не тот инструмент который подходит в 100% случаев.
В случае с Yii замена любого компонента на что-то получше или просто более подходящее к ситуации вызовет боль. Слишком большая связанность у фреймворка. Попробуйте выкинуть active record и посмотрим что останется. Хотя во второй версии получше, да. В симфони я могу делать что захочу, и при этом без каких-либо кастылей. Многим правда эта гибкость наоборот не нравится. Им хочется что бы все что нужно было из коробки.
Пара слов о REST API на Symfony в связке FOSRestBundle + JMSSerializerBundle