symfony - 一些 OneToMany 关系作为对象返回,一些作为 IRI - API-Platform
问题描述
当我向表单提出获取请求时,我想将相关问题和问题组作为 IRI 列表。
我有几个实体:
- 表单(字段:question_groups,问题)
- QuestionGroup(字段:表格、问题)
- 问题(字段:form、question_group)
当我对表单提出获取请求时,它返回:
- 形式
- 问题 ['/api/questions/1',...]
- questionGroups [{id:1,name:'foo',questions: ['/api/questions/1',...]...},...]
如您所见,Form.questions 是 IRI 列表,但 Form.questionGroups 是对象列表。我希望将它们都用作 IRI。
在下图中的 questionGroups 字段下有一个 questionGroup 字段,但在问题下没有问题字段或在答案下没有答案,...
整件事对我来说毫无意义,我试图设置@MaxDepth,它什么也没改变(除非我使用@MaxDepth(0) 抛出500错误而没有任何错误消息作为响应或在php日志中)
谁能解释为什么,我应该怎么做才能将问题和问题组加载为 IRI 列表?
谢谢
以下是上述实体的相关部分。
/**
* @ORM\Entity
* @ApiResource
* @ORM\HasLifecycleCallbacks
* @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false, hardDelete=true)
*/
class Form
{
/**
* @ORM\Column(type="text", length=200, nullable=false)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="QuestionGroup", mappedBy="form", cascade={"REMOVE"})
*/
private $question_groups;
/**
* @ORM\OneToMany(targetEntity="Question", mappedBy="form", cascade={"REMOVE"})
*/
private $questions;
}
/**
* @ORM\Entity
* @ApiResource
* @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false, hardDelete=true)
*/
class QuestionGroup
{
/**
* @ORM\Column(type="string", length=200, nullable=false)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="Form",inversedBy="question_groups")
*/
private $form;
/**
* @ORM\OneToMany(targetEntity="Question", mappedBy="question_group", cascade={"REMOVE"})
*/
private $questions;
}
/**
* @ORM\Entity
* @ApiResource
* @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false, hardDelete=true)
*/
class Question
{
/**
* @ORM\Column(type="string", length=200, nullable=false)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="Form",inversedBy="questions")
*/
private $form;
/**
* @ORM\ManyToOne(targetEntity="QuestionGroup", inversedBy="questions")
*/
private $question_group;
}
解决方案
我发现如果实体字段/属性是像“$question_groups”这样的snake_case,那么API 会将其作为对象列表返回,如果它的camelCase 像“$questionGroups”,它将作为IRI 列表返回。旁注: normalisationContext 不喜欢snake_case。如果您使用 normalisationContext 并且该属性是snake_cased,则它将不包含在响应数据中。
推荐阅读
- html - 为什么使用 'aside' 标签而不是 div 也适用于几乎所有地方?
- python - 尝试将包含 2 层的权重文件加载到具有 0 层的模型中
- javascript - 播放 Dash 或 .mpd 视频 react-native(IOS)
- reactjs - 在反应中获得具有确切所有者的行
- docker - 在 CentOS 中部署 docker 容器时 DNS 无法解析
- docker - 将 .net core v2.1.13 升级到 v2.1.16 后,docker 上的 IdentityServer4 在 chrome 中不起作用
- keycloak - 如何使用 curl 增加 keycload 承载访问令牌时间?
- css - 在 UL 之后如何定义底部边距?
- node.js - 如何在带有自定义配置界面的打字稿中使用 node-config?
- markdown - 将多个章节拼接在一起,每个章节都有一个 % 标题