如何通过 ApiPlatform 保存 json 属性?
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;
}
}
请求
curl -X POST "https://localhost/api/entities" \
-H "accept: application/ld+json" \
-H "Content-Type: application/ld+json" \
-d "{\"settings\":{\"option\":\"value\"}}"
回应
{
"status": 400,
"message": "Expected argument of type \"string\", \"array\" given"
}
如何通过 ApiPlatform 保存 json 属性?
Json 验证者有罪 https://github.com/symfony/validator/blob/v5.1.3/Constraints/JsonValidator.php#L37
这是多余的 ApiPlatform 将通过评论检查类型
@var array Settings
<?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;
}
}
请求
curl -X POST "https://localhost/api/entities" \
-H "accept: application/ld+json" \
-H "Content-Type: application/ld+json" \
-d "{\"settings\":{\"option\":\"value\"}}"
回应
{
"status": 400,
"message": "Expected argument of type \"string\", \"array\" given"
}
如何通过 ApiPlatform 保存 json 属性?
Json 验证者有罪 https://github.com/symfony/validator/blob/v5.1.3/Constraints/JsonValidator.php#L37
这是多余的 ApiPlatform 将通过评论检查类型
@var array Settings