dongshi9407 2019-03-14 15:43
浏览 83

如何在序列化输出中公开鉴别器?

How can one expose the discriminator in the serialized output?

The following was adapted from this example and adjusted by the XML reference.

My entities are:

namespace Fully\Qualified;
abstract class Vehicle {
    public function getId() {return $this->id;}
    public function getCommonProperty() {return $this->common_property;}
}
class Car extends Vehicle {
    public function getCarProperty() {return $this->car_property;}
}
class Moped extends Vehicle{
    public function getMopedProperty() {return $this->moped_property;}
}

Doctrine is configured as:

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="Fully\Qualified\Vehicle" table="vehicle" inheritance-type="JOINED">
    <discriminator-column name="dtype" type="string" length="255"/>
    <discriminator-map>
      <discriminator-mapping value="car" class="Fully\Qualified\Car"/>
      <discriminator-mapping value="moped" class="Fully\Qualified\Moped"/>
    </discriminator-map>
    <id name="id" type="integer" column="id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="common_property" type="string" column="common_property" length="45"/>
  </entity>
</doctrine-mapping>

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="Fully\Qualified\Car" table="car">
    <field name="car_property" type="string" column="car_property"/>
  </entity>
</doctrine-mapping>

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="Fully\Qualified\Moped" table="moped">
    <field name="moped_property" type="string" column="moped_property"/>
  </entity>
</doctrine-mapping>

My desired results are something like:

[
  {
    "id": 1,
    "commonProperty": "foo",
    "car_property": "foo",
    "dtype": "car"
  },
  {
    "id": 2,
    "commonProperty": "foo",
    "moped_property": "foo",
    "dtype": "moped"
  },
  {
    "id": 3,
    "commonProperty": "foo",
    "moped_property": "foo",
    "dtype": "moped"
  },
  {
    "id": 4,
    "commonProperty": "foo",
    "car_property": "foo",
    "dtype": "car"
  }
]

My attempt to configure the serializer is as follows, however, the discriminator (i.e. "dtype") isn't included:

<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
    <class name="Fully\Qualified\Vehicle" discriminator-field-name="dtype" discriminator-disabled="false">
        <discriminator-class value="car">Fully\Qualified\Car</discriminator-class>
        <discriminator-class value="moped">Fully\Qualified\Moped</discriminator-class>
        <discriminator-groups>
            <group>foo</group>
            <group>bar</group>
        </discriminator-groups>
        <property name="id" groups="foo, bar"/>
        <property name="common_property" groups="foo, bar"/>
        <property name="dtype" groups="foo, bar"/>
    </class>
</serializer>

<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
    <class name="Fully\Qualified\Car">
        <property name="moped_property" groups="foo, bar"/>
    </class>
</serializer>

<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
    <class name="Fully\Qualified\Moped">
        <property name="moped_property" groups="foo, bar"/>
    </class>
</serializer>

How can one expose the discriminator in the serialized output?

  • 写回答

1条回答 默认 最新

  • douren5898 2019-03-24 15:56
    关注

    If exclusion groups are not used, it will be exposed by default. Unfortunately, I wish to use exclusion groups.

    评论

报告相同问题?

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本