如何重命名 Json ld 上下文中的 @id - API 平台 [已解决]

How rename the @id in Json ld Context - API Platform [Resolved]


我在 API 工作,我的 Json-ld
有问题 是否可以更改 Json-ld 上下文中的@id?

实体:

/**
 * @ApiResource(
 *      normalizationContext={"groups"={"question_get"}},
 *      denormalizationContext={"groups"={"question_post"}},
 *      itemOperations={
 *          "get" = {
 *              "enable_max_depth"=true,
 *              "force_eager"=false,
 *          },
 *          "put" = {
 *               "denormalization_context"={"groups"={"question_put"}}
 *          }
 *      },
 *      collectionOperations={
 *          "get"= {
 *                   "normalization_context"={"groups"={"questions_get"}},
 *               },
 *          "post"
 *      },
 *      attributes={
 *          "enable_max_depth"="true",
 *          "pagination_client_items_per_page"=true,
 *      },
 *  )
 */
class Question
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

  ...

Json :

"@context": "/api/contexts/Question",
  "@id": "/api/questions",
  "@type": "hydra:Collection",
  "hydra:member": [
    {
      "@id": "/api/questions/32",
      "@type": "Question",
      "id": 32,
     ...

以及我想要的:

  "@id": "/questions"

我想保留路线“/api/question”,我只是想改变我实体的@id,而不是关系。

编辑: 我找到了一种方法,我使用了规范化器:https://api-platform.com/docs/core/identifiers/#custom-identifier-normalizer

#App\src\Serializer\ApiNormalizer.php

...

 public function normalize($object, $format = null, array $context = [])
    {

        $data = $this->decorated->normalize($object, $format, $context);

        $data['@id'] = substr($data['@id'], 4);

        return $data;

    }

...

您可以在您的上下文中提供 alias/shortening:

"type" : "@type",
"id" :"@id"

这使您可以摆脱文档和代码中的 @-signs。