微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

API平台:规范化映射的超类仅包括超类的属性,而不包括子类

如何解决API平台:规范化映射的超类仅包括超类的属性,而不包括子类

编辑:使用简单的用例创建了一个仓库来复制问题,并在https://github.com/api-platform/api-platform/issues/1648的API平台发布队列中创建了一个问题。

我有一个SurveyData映射的超类,它具有多个实现它的子类。对于这个问题,MonthlyDataSurveyData超类的子代。

我有一个Submission API资源,该资源与OnetoOneSurveyData关系。

我试图在检索时将SurveyData子实体(在本例中为MonthlyData实体)内联到我的提交实体中。我已经在normalizationContext的{​​{1}}注释中设置了Submission,并在要内联的各种属性上设置了ApiResource注释。

大多数情况下,除了@GroupsSurveyData JSON-LD属性外,Submission映射超类的属性在我的@id实体中内联显示但是,实际子实体(@type)的属性不会显示

我可以确认传递到规范化器中的对象是完全填充的MonthlyTotals对象,但是规范化器的输出仅包含在MonthlyTotals映射的超类中定义的属性

我可以确认我正在使用认的核心API平台JSON-LD规范化器。

在此先感谢您的帮助!

这里是SurveyData的定义(为简洁起见,减去了“ use”语句和getter / setter方法

Submission

这里的SurveyData(条件相同):

<?PHP
/**
 * @ApiResource(
 *   normalizationContext={"groups"={"submission"}},*   denormalizationContext={"groups"={"submission"}},*   itemOperations={
 *     "get"={
 *       "method"="GET",*       "access_control"="is_granted('view',object)",*     },*     "put","patch","delete",*   },* )
 *
 * @ApiFilter(NumericFilter::class,properties={"patient.id"})
 * @ApiFilter(OrderFilter::class,properties={"created","status","patient.chartID"},arguments={"orderParameterName"="order"})
 * @ApiFilter(SearchFilter::class,properties={"status": "exact","patient.chartID": "exact"})
 * @ORM\Entity(repositoryClass="App\Repository\SubmissionRepository")
 * @DelphiAssert\SubmissionDataIsValid
 */
class Submission
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"submission"})
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Facility")
     * @ORM\JoinColumn(nullable=false)
     * @Groups({"submission"})
     */
    private $facility;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Patient",inversedBy="submissions")
     * @Groups({"submission"})
     */
    private $patient;

    /**
     * @ORM\Column(type="string",length=255)
     * @Groups({"submission"})
     */
    private $survey;

    /**
     * @ORM\Column(type="string",length=255,nullable=true)
     * @Groups({"submission"})
     */
    private $dateDetail;

    /**
     * @ORM\Column(type="datetime")
     * @Assert\Type("\DateTimeInterface")
     * @Groups({"submission"})
     */
    private $created;

    /**
     * @ORM\Column(type="datetime")
     * @Assert\Type("\DateTimeInterface")
     * @Groups({"submission"})
     */
    private $updated;

    /**
     * @ORM\Column(type="string",length=255)
     * @Groups({"submission"})
     */
    private $user;

    /**
     * @ORM\Column(type="string",length=255)
     * @Groups({"submission"})
     */
    private $status;

    /**
     * @ORM\OnetoOne(targetEntity="App\Entity\SurveyData\SurveyData",inversedBy="submission",cascade={"persist","remove"},orphanRemoval=true,fetch="EAGER")
     * @Groups({"submission"})
     */
    private $surveyData;

这是每月数据:

<?PHP
/**
 * @ORM\Entity(repositoryClass="App\Repository\SurveyData\SurveyDataRepository")
 * @ORM\InheritanceType("JOINED")
 * @ORM\discriminatorColumn(name="type",type="string")
 * @ORM\discriminatorMap({
 *   "SurveyData" = "App\Entity\SurveyData\SurveyData",*   "RPCSEducationProcessMeasures" = "App\Entity\SurveyData\RPCS\EducationProcessMeasures",*   "RPCSMonthlyTotals" = "App\Entity\SurveyData\RPCS\MonthlyTotals"
 * })
 */
class SurveyData
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups("submission")
     */
    private $id;

    /**
     * @ORM\OnetoOne(targetEntity="App\Entity\Submission",mappedBy="surveyData",fetch="EAGER")
     */
    private $submission;

解决方法

可能是 @Groups({"submission"})@Groups("submission")。 全部更改为 @Groups({"submission"})

很难用当前的文档进行验证,因为它现在使用 PHP8 属性进行了记录。我只使用过 YAML 配置,所以不能 100% 确定。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。