cetver
cetver

Reputation: 11829

How to save json attribute via ApiPlatform?

<?php

/** 
 * @ApiResource(
 *     normalizationContext={"groups"={"fields_group:read"}},
 *     denormalizationContext={"groups"={"fields_group:write"}}
 * )
 */
class Entity 
{
    /**
     * @var array Settings.
     *
     * @ORM\Column(type="json", options={"comment":"Settings"})
     *
     * @Assert\NotBlank()
     * @Assert\Json()
     *
     * @Groups({"fields_group:read", "fields_group:write"})
     * @ApiProperty(
     *     attributes={
     *         "openapi_context"={
     *             "type"="object",
     *             "example"={"option":"value"}
     *         }
     *     }
     * )
     */
    private array $settings;

    /**
     * @return array
     */
    public function getSettings(): array
    {
        return $this->settings;
    }



    /**
     * @param array $settings
     *
     * @return self
     */
    public function setSettings(array $settings): self
    {
        $this->settings = $settings;

        return $this;
    }
}

Request

curl -X POST "https://localhost/api/entities" \
    -H  "accept: application/ld+json" \
    -H  "Content-Type: application/ld+json" \
    -d "{\"settings\":{\"option\":\"value\"}}"

Response

{
  "status": 400,
  "message": "Expected argument of type \"string\", \"array\" given"
}

How to save json attribute via ApiPlatform ?

Upvotes: 0

Views: 692

Answers (1)

cetver
cetver

Reputation: 11829

Json validator is guilty https://github.com/symfony/validator/blob/v5.1.3/Constraints/JsonValidator.php#L37

It is redundant ApiPlatform will check type by comment @var array Settings

Upvotes: 2

Related Questions