Wpis z mikrobloga

#programowanie #php #serializacja #json #symfony #symfony4 #doctrine #orm

Siema phpmirki,
piszę API RESTowe w Symfony 4 i za pomocą Doctrine pobieram sobie z bazy danych listę obiektów klasy ClassA, która wśród swoich pól prywatnych ma jedno pole typu ArrayCollection i teraz chcę zwrócić wszystko jako JSON, aby miało to strukturę mniej więcej

[
{
"id": 1,
"name" : "Blabla",
"ClassB" : [{
"id": 9,
"name": "Urabura",
"status": 0
} { ... }],
{ ... }
]

(dzięki wykopowy edytor za obcięcie indentów)

Rozumiem, że nie ma lepszego sposobu niż implementacja JsonSerializable i własnych metod serializacji? Co w przypadku dużych zagnieżdżeń (np. ClassB agreguje ClassC, która z kolei agreguje ClassD)? Co w przypadku, gdy w niektórych akcjach chcę wchodzić głębiej w każdą kolejną agregację, a w innych nie (np. wystarczy mi id i name, bez danych o ClassB)?

Da się to jakoś "ładnie" rozwiązać?
  • 3
@nehemiah: dzięki, spojrzę na to i przetestuję. Na co dzień jestem frontendowcem i zazwyczaj korzystam już z gotowego API, ale lubię zdobywać nową wiedzę :P

Może ja coś źle zaprojektowałem i nie powinno się robić takich zagnieżdżeń wielokrotnych? Bo w niektórych widokach, w których będe używał konkretnych obiektów nie będę potrzebował ich wszystkich składowych więc wydaje mi się bez sensu zwracanie ich z serwera i chciałbym mieć wpływ na to która