我有一个像这样的 Symfony 4.4 教义类:
/**
* @ApiResource(
* collectionOperations={
* "GET" = {"security"="is_granted('ROLE_ADMIN')"},
* "POST" = {"security_post_denormalize"="is_granted('EDIT', object)"},
* },
* itemOperations={
* "GET" = {"security"="is_granted('EDIT', object)"},
* "PUT" = {"security"="is_granted('EDIT', object)"},
* },
* normalizationContext={"groups"="my_symfony_class:read"},
* denormalizationContext={"groups"="my_symfony_class:write"},
* attributes={
* "pagination_items_per_page"=30,
* }
* )
* @ORM\Table(name="my_symfony_table")
*/
class MySymfonyClass
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="default_value", type="json_array", nullable=true)
* @Groups("my_symfony_class:read","my_symfony_class:write")
*/
private $defaultValue;
}
但是当我想将 defaultValue 设置为 JSON 字符串“0”的对象放置到 API 平台端点时,API 平台会给出以下错误消息:
"The type of the \"defaultValue\" attribute must be \"array\", \"string\" given."
该错误似乎与How to save json attribute via ApiPlatform?相同,但区别在于我不断言为JSON(“@Assert\Json()”)。
如何解决这个问题?
这就是我使用的例子。 根据您的教义版本,它可能不起作用。
#[ORM\Column(type: 'json', options: ["default" => '[1, 2, 3, 4, 5]'])]
private private array $openDays = [1, 2, 3, 4, 5];
使用symfony和doctrine json类型;你不必自己设置json,只需使用php数组,它会在刷新到数据库/从数据库检索时自动进行json_encode / json_decode