Symfony Проблема с контекстными группами нормализации платформы Api - PullRequest
0 голосов
/ 26 апреля 2020

Я борюсь со странной проблемой при использовании нормализатора с группами. Похоже, что есть проблема со свойствами datetime.

Проблема возникает при использовании normalizationContext в ApiResource и / или normalization_context в операции.

<?php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ApiResource(
 *     collectionOperations={
 *          "get"={
 *              "normalization_context"={
 *                  "datetime_format"="Y-m-d\TH:i:sP",
 *                  "groups"={"bookmarkdata:collection:read"}
 *              }
 *          }
 *     },
 *     itemOperations={
 *          "get"
 *     },
 *     normalizationContext={"groups"={"bookmarkdata:read"}}
 * )
 * @ORM\Entity(repositoryClass="App\Repository\BookmarkDataRepository")
 */
class BookmarkData
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"bookmarkdata:read", "bookmarkdata:collection:read"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=2048, nullable=true)
     * @Groups({"bookmarkdata:read", "bookmarkdata:collection:read"})
     */
    private $screenshot;

    /**
     * @ORM\Column(type="string", length=2048)
     * @Groups({"bookmarkdata:read", "bookmarkdata:collection:read"})
     */
    private $dump;

    /**
     * @ORM\Column(type="datetime")
     * @Groups({"bookmarkdata:read", "bookmarkdata:collection:read"})
     */
    private $created_at;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $updated_at;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getScreenshot(): ?string
    {
        return $this->screenshot;
    }

    public function setScreenshot(?string $screenshot): self
    {
        $this->screenshot = $screenshot;

        return $this;
    }

    public function getDump(): ?string
    {
        return $this->dump;
    }

    public function setDump(string $dump): self
    {
        $this->dump = $dump;

        return $this;
    }

    public function getCreatedAt(): ?\DateTimeInterface
    {
        return $this->created_at;
    }

    public function setCreatedAt(\DateTimeInterface $created_at): self
    {
        $this->created_at = $created_at;

        return $this;
    }

    public function getUpdatedAt(): ?\DateTimeInterface
    {
        return $this->updated_at;
    }

    public function setUpdatedAt(?\DateTimeInterface $updated_at): self
    {
        $this->updated_at = $updated_at;

        return $this;
    }
}

В свойстве результата created_at игнорируется.

{
    "@context": "/api/contexts/BookmarkData",
    "@id": "/api/bookmark_datas",
    "@type": "hydra:Collection",
    "hydra:member": [
        {
            "@id": "/api/bookmark_datas/1",
            "@type": "BookmarkData",
            "id": 1,
            "screenshot": "This is screen",
            "dump": "This is dump"
        }
    ],
    "hydra:totalItems": 1
}

Я использую Docker. Мои зависимости.

{
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": "^7.1.3",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "api-platform/api-pack": "^1.2",
        "doctrine/doctrine-migrations-bundle": "^2.1",
        "easycorp/easyadmin-bundle": "^2.3",
        "lexik/jwt-authentication-bundle": "^2.6",
        "nesbot/carbon": "^2.32",
        "symfony/console": "4.4.*",
        "symfony/dotenv": "4.4.*",
        "symfony/flex": "^1.3.1",
        "symfony/framework-bundle": "4.4.*",
        "symfony/security-bundle": "4.4.*",
        "symfony/yaml": "4.4.*"
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.3",
        "fzaninotto/faker": "^1.9",
        "symfony/maker-bundle": "^1.15",
        "symfony/profiler-pack": "^1.0"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "paragonie/random_compat": "2.*",
        "symfony/polyfill-ctype": "*",
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false,
            "require": "4.4.*"
        }
    }
}

...