Как группы дискриминаторов сериализатора используются для политики исключения?

В документации сериализатора говорится, что группы дискриминаторов могут быть использовать с политикой исключения, однако документация по стратегиям исключения не объясняет, как сделать это. Как их можно использовать?

@Discriminator Эта аннотация позволяет сериализовать/десериализовать отношения, которые являются полиморфными, но где существует общий базовый класс. Аннотация @Discriminator должна применяться к наименьшему супертипу:

/**
 * @Discriminator(field = "type", disabled = false, map = {"car": "Car", "moped": "Moped"}, groups={"foo", "bar"})
 */
abstract class Vehicle { }
class Car extends Vehicle { }
class Moped extends Vehicle { }

Примечание. Группы необязательны и используются в качестве политики исключения.


person user1032531    schedule 25.03.2019    source источник


Ответы (1)


groups используется для включения или исключения только field (но не субобъекта).

Используйте это так:

use JMS\Serializer\SerializationContext;

$serializer->serialize(new Moped(), 'json', SerializationContext::create()->setGroups(array('foo')));
person Thomas Decaux    schedule 12.09.2019
comment
Спасибо, Томас. Я понимаю, как можно добавить группу к свойству. Но какова цель их добавления, таких как @Discriminator(..., groups={"foo", "bar"})? - person user1032531; 12.10.2019
comment
дискриминатор — это свойство, как и любые другие переменные класса. - person Thomas Decaux; 14.10.2019
comment
Это означает, что @Discriminator(field = "type", ... groups={"foo", "bar"}) будет включать только дискриминатор с типом имени свойства, когда foo или bar передаются в SerializationContext::create()->setGroups()? Это имеет смысл! К сожалению, я только что попробовал это, и это не имело никакого эффекта. На всякий случай я также искал метод setDiscriminatorGroup(), но такого метода нет. Вы когда-нибудь использовали его? Спасибо - person user1032531; 14.10.2019