Как мне изменить вывод сериализации из моего объекта? - PullRequest
0 голосов
/ 27 декабря 2018
$normalizer = new ObjectNormalizer();
//            $normalizer->setCircularReferenceLimit(2);
$normalizer->setCircularReferenceHandler(function ($object) {
    return $object->getId();
});
$normalizer->setIgnoredAttributes(array('users', '__initializer__', '__cloner__', 'authkey', '__isInitialized__', "products"));
$serializer = new Serializer(array($normalizer), array(new JsonEncoder()));

return new JsonResponse($serializer->serialize($product, 'json'));

Вот результат:

{
  "id": 128,
  "name": "product",
  "price": 12,
  "category": {
    "id": 58,
    "name": "category",
    "company": {
      "id": 1,
      "name": "foo",
      "tables": []
    }
  },
  "description": "this is a product",
  "company": {
    "id": 1,
    "name": "foo",
    "tables": []
  }
}

но как мне получить следующий результат:

{
  "id": 128,
  "name": "product",
  "price": 12,
  "category": {
    "name": "category"
  },
  "description": "this is a product",
  "company": {
    "id": 1,
    "name": "foo",
    "tables": []
  }
}

Как я могу варьировать между значениями?

например, я хочу здесь:

"категория": {"имя": "категория"},

позже идентификатор также.

1 Ответ

0 голосов
/ 27 декабря 2018

Взгляните на компонент сериализатора Атрибуты групп .Я считаю, что это то, что вы ищете.

Вы можете выбрать, какие свойства объекта должны быть включены в каждый конкретный ответ.

Просто установите группу в объекте

/**
 * @Groups({"group1", "group2"})
 */
public $foo;

А затем укажите группу или массив групп для сериализации

$serializer = new Serializer(array($normalizer));    
$data = $serializer->normalize($obj, null, array('groups' => 'group1'));

Иногда недостаточно просто групп, то есть, когда вы можете использовать Doctrine hydrator .Это немного более сложное решение, но оно дает вам гораздо больше возможностей.

Обычно вы используете Attributes Groups, когда вам нужно сделать простой выбор - извлечь одну конкретную сущность или набор сущностей с несколькими объединеннымиобъекты (также используйте группы для соединений).Doctrine hydrator используется, когда вам нужен агрегированный выбор, например, извлечение данных из таблицы, которая не имеет заданного отношения, или добавление комбинированных данных вместе с обычными данными.

...