API平台:将嵌入式子资源更改为它们的@id

问题描述 投票:0回答:1

我正在使用Symfony 4.3和API平台2.4。在我的API中,有资源“组”和相关的子资源“电话”:

{
    "@context": "/contexts/groups",
    "@id": "/groups/7116",
    "@type": "groups",
    "id": 7116,
    "name": "Standard Test",
    "description": "",
    "phones": {
        "7848412": {
            "@id": "/phones/7848412",
            "@type": "phones",
            "id": 7848412,
            "phone": "+412344545656",
            "a": "o2",
            "b": "",
            "c": "",
            "d": "",
            "e": ""
        }
}

资源YAML:

entities\ClientPhoneGroup:
  shortName: 'groups'
  description: "Phone's group"
  collectionOperations:
    post:
      denormalization_context:
        groups: ['write']
  itemOperations:
    get: ~
    put:
      denormalization_context:
        groups: ['write']
    delete: ~

  attributes:
    normalization_context:
      groups: ['read']
    security: "is_granted('IS_AUTHENTICATED_FULLY')"
    subresource_operations:
      phone_get_subresource:
        method: 'GET'

  properties:
    id:
      identifier: true
    phones:
      subresource:
        resourceClass: 'entities\ClientPhone'
        collection: false

entities\ClientPhone:
  shortName: 'phones'
  description: "Phones list by group"
  collectionOperations:
    post:
      path: /groups/{group_id}/phones
      requirements:
        group_id: '\d+'
      denormalization_context:
        groups: ['write']
  itemOperations:
    get: ~
    put:
      denormalization_context:
        groups: ['write']
    delete: ~
  attributes:
    normalization_context:
      groups: ['read']
    security: "is_granted('IS_AUTHENTICATED_FULLY') "

序列化器YAML:

entities\ClientPhoneGroup:
  attributes:
    id:
      groups: ['read']
    name:
      groups: ['read', 'write']
    description:
      groups: ['read', 'write']
    phones:
      groups: ['read']

entities\ClientPhone:
  attributes:
    id:
      groups: ['read']
    phone:
      groups: ['read', 'write', 'edit']
    a:
      groups: ['read', 'write', 'edit']
    b:
      groups: ['read', 'write', 'edit']
    c:
      groups: ['read', 'write', 'edit']
    d:
      groups: ['read', 'write', 'edit']
    e:
      groups: ['read', 'write', 'edit']
  1. 如何将嵌入的电话列表更改为“ / groups / 7116 / phones”组资源?
  2. 如何将链接添加到“组”资源(例如/ groups / 7116)到电话子资源?
symfony api-platform.com symfony-4.3
1个回答
0
投票

回答问题2。从normalization_context:groups: ['read']中删除entities\ClientPhone,这样当您调用GET组资源api时,电话子资源将具有IRI而不是所有字段。

这最适合我。

请详细说明问题1。

© www.soinside.com 2019 - 2024. All rights reserved.