Size: a a a

2020 August 18

Д

Дмитрий in Yii Framework 3
Дмитрий
В yii2 есть сценарии. В зависимости от сценария можно брать поля, задействованные в сценарии и отдавать форматтеру какому-нибудь. Json или другой какой указан, например
Это про другое.
источник

Д

Дмитрий in Yii Framework 3
😁 нужен игнорлист?
источник

RM

Rustam Mamadaminov in Yii Framework 3
похоже да :)
источник

AM

Alexander Makarov in Yii Framework 3
Дмитрий
В yii2 есть сценарии. В зависимости от сценария можно брать поля, задействованные в сценарии и отдавать форматтеру какому-нибудь. Json или другой какой указан, например
Не надо нам сценариев.
источник

RT

Roman Tsurkanu in Yii Framework 3
Alexander Makarov
Не надо нам сценариев.
+1
источник

Д

Дмитрий in Yii Framework 3
Да я понимаю. Я это в контексте yii2 fields написал.
источник

AM

Alexander Makarov in Yii Framework 3
Дмитрий
Кто-нибудь хочет сделать аналог сериалайзера с возможность кастомизации ответа на лету?

На работе юзаем jms/serializer, но это решение мне не нравится.

Хочется описывать структуры в php/json/yaml/annotations, когда возвращаются данные.

Пример:
Есть метод, который возвращает UserEntity.
Не хочется делать UserOutputDTO, расписывать какое свойство куда пойдёт и так для каждой сущности.
Хочется где-то задать структуру-маппинг, которая будет автоматом преобразована в нужное. Кстати, тут возможно сделать интеграцию с OpenApi.
Еще с dto-шками бывает больно, когда приходится кастомизировать форматы в разных методах.
Пример:
Request: /user/123/id
Response: {id: *}

Request: /user/123/full
Response: {id: *, name: *, age: *, created_at: *, parent: *, children: *, ....}

Request: /post/12345
Response: {id: *, author: {id: *, name: *}}

Request: /post/12345/export
Response: {id: *, author: {id: *, name: *}, relations...}


Я понимаю, что это в сторону плохого проектирования и смешивании ответственностей методов и классов, но часто такие кейсы хочется решить за максимум час, а выходит на половину дня.

Было бы круто заложить такой пакет с интеграцией под Yii 3, чтобы из коробки и с примерами.
Аналог: есть api-platform, в которой на вход/выход свои DTO с сериализатором из коробки, но нет фичи именно для гибких сериализаторов для вложенных сущностей. Нет даже аналогов для fields из Yii2 (в Yii3 тоже нет).

Есть у кого-нибудь мысли на этот счет?
источник

RT

Roman Tsurkanu in Yii Framework 3
По-моему да
источник

Д

Дмитрий in Yii Framework 3
В hydrateInto ещё бы приделать колбэки
источник

Д

Дмитрий in Yii Framework 3
источник

Д

Дмитрий in Yii Framework 3
Наверное, что-то вроде этого, только отрезанное от yii2
источник

RT

Roman Tsurkanu in Yii Framework 3
Да, тоже хороший вариант. Тоже  по сути маппер
источник

AM

Alexander Makarov in Yii Framework 3
Дмитрий
В hydrateInto ещё бы приделать колбэки
Скорее в определение полей...
источник

AM

Alexander Makarov in Yii Framework 3
У меня он на рефлексии, что спорно, конечно...
источник

AP

Arman Poghosyan in Yii Framework 3
@xepozz Вот issue для этого. Планируется для DTO (после того, как split пакета сделаем). https://github.com/yiisoft/form/issues/37
источник

AP

Arman Poghosyan in Yii Framework 3
Если прям сейчас надо, то вот варианты:
1. https://github.com/mark-gerarts/automapper-plus
2. https://github.com/janephp/automapper
источник

AP

Arman Poghosyan in Yii Framework 3
Это все руками делать не нужно, особенно если entity много или там mapping сложный
источник

AP

Arman Poghosyan in Yii Framework 3
Alexander Makarov
У меня он на рефлексии, что спорно, конечно...
Под катом mapper-а нужно будет hydrator юзать, но желательно без рефлексии, как-то так: https://github.com/Ocramius/GeneratedHydrator
источник

AM

Alexander Makarov in Yii Framework 3
не люблю генерацию кода...
источник

RM

Rustam Mamadaminov in Yii Framework 3
источник