php - API 平台:规范化映射超类仅包括来自超类的属性,不包括子类
问题描述
编辑:用一个简单的用例创建了一个 repo 来复制问题,并在https://github.com/api-platform/api-platform/issues/1648的 API 平台问题队列中创建了一个问题。
我有一个SurveyData
映射的超类,它有多个实现它的子类。对于这个问题,MonthlyData
是SurveyData
超类的孩子。
我有Submission
一个OneToOne
与SurveyData
.
当我检索它时,我试图将SurveyData
子实体(在本例中为MonthlyData
实体)内联到我的提交实体中。我已经normalizationContext
在我Submission
的ApiResource
注释中设置了 ,并@Groups
在我想要内联的各种属性上设置了注释。
它主要是有效的,因为除了和JSON-LD 属性之外,我的SurveyData
映射超类的属性内联显示在我的实体中。但是,实际子实体 ( )的属性不会出现。Submission
@id
@type
MonthlyTotals
我可以确认传递给规范器的对象是一个完全填充的MonthlyTotals
对象,但规范器的输出仅包含SurveyData
映射超类中定义的属性。
我可以确认我正在使用默认的核心 API 平台 JSON-LD 规范器。
预先感谢您的任何帮助!
这是一个Submission
定义(为简洁起见,减去'use'语句和getter / setter:
<?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;
这是 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", cascade={"persist", "remove"}, fetch="EAGER")
*/
private $submission;
这是每月数据:
/**
* @ApiResource(
* normalizationContext={"groups"={"submission"}},
* denormalizationContext={"groups"={"submission"}}
* )
* @ORM\Entity(repositoryClass="App\Repository\SurveyData\RPCS\MonthlyTotalsRepository")
*/
class MonthlyTotals extends SurveyData
{
/**
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $num_deliveries;
/**
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $num_cesarean;
/**
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $num_epidural_anesthesia;
解决方案
可能是@Groups({"submission"})
诉@Groups("submission")
。。全部更改为@Groups({"submission"})
.
很难用当前文档进行验证,因为它现在使用 PHP8 属性进行了记录。我只使用了 YAML 配置,所以不能 100% 确定。
推荐阅读
- javascript - 从下拉列表中获取动态调用 api 的数据
- azure - Purview 是否显示 ADF 管道通过数据流自动创建的表的沿袭?
- ruby-on-rails - Rails 管理员:下拉条目太多
- javascript - 使用 Fetch API 时数据流如何工作?
- r - 如何合并每月汇总并在某个日期拆分数据集
- c - 为什么 GCC 不会在长参数上给我 stackerror?
- java - 我如何将纹理添加到 libgdx 中的 textButtons
- php - ErrorException 未定义变量:posts - $posts 未定义
- laravel - 如何在 laravel Blade 中为管理布局构建视图?
- c - C中的位域;字节和位