Да я знаю что в yii2 реализована архитектура REST API но ребятам которые со мной работают это не понравилось, они захотели что-бы по конкретному запросу выдавались конкретные данные, и не нужно было дописывать всяких условий)
Есть модель "user" с полями name, age, token.
И модель "security" с полями time, status, hash.
При запросе site/api/user нужно показать {"name":'Tolik', "age":28} token нет.
А при запросе site/api/security {"status":true, "hash":'asdas5asd5asd', "token":'asdasd548wqf4as4f5'}
Если скрою в user->fields() не смогу отобразить токен при site/api/security.
И таких переплетеных моделей и свойств масса. Как мне элегантно обойти это?
У меня сейчас в лоб) Вытаскиваю данные из модели "security", помещаю в $data['security'] = $security
Потом достаю модель "user" и $data['token'] = $user->token.
Можно создать класс Response реализующий интерфейс JsonSerializable. В методе интерфейса собирать свойства текущего класса и отдавать ввиде массива. В конструкторе класс будет принимать модель user и проставлять себе необходимые свойства.
Так у вас появится отдельный класс цель которого направлена только на формирование ответа (можно объявить абстрактный базовый класс и формировать ответы для каждого метода), а так же вы сможете у свойств указать типизацию. Так что вы будете точно знать что будет на выходе и не полагаться на массив.