Как переименовать @id в контексте Json ld - Платформа API [решено] - PullRequest
1 голос
/ 14 февраля 2020


Я работаю для API, и у меня проблема с моим Json -ld
Можно ли изменить @id в контексте Json -ld?

Сущность:

/**
 * @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 / вопрос ", я только ищу изменения @id моего объекта, но не отношения.

Редактировать: Я нашел способ, я использую нормализатор: https://api-platform.com/docs/core/identifiers/#custom -идентификатор-нормализатор

#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;

    }

...

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете предоставить псевдоним / сокращение в вашем контексте:

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

Это позволяет вам избавиться от @ -символов в ваших документах и ​​в вашем коде. читать дальше

...