我有一个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?相同,但不同的是我没有Assert为JSON(“@Assert\Json()”)。
如何解决这一问题?
1条答案
按热度按时间wnavrhmk1#
这就是我使用的例子。根据你的教义版本,它可能不起作用。
使用symfony和doctrine json类型;你不需要自己设置json,只要使用php数组,它会在刷新到数据库/从数据库检索时自动json_encode / json_decode。
关于你的@Assert\Json()。它不能工作,因为它验证了你的
string
是一个json有效的字符串。但是当使用type: 'json'
类型时,你的php类型不是string
而是array
。他们不能一起工作。关于你的问题,这与API平台无关,而是与教义有关。
此外,为了避免这样的问题,我建议你键入每个属性。与理解未来问题所花费的时间相比,这将花费你很少的时间。这也会帮助你更好地理解你所做的事情。在这种情况下,doctrine json类型总是与php数组类型相关。