API平台只接受教义类型json_array的数组,如何保存字符串?

问题描述 投票:0回答:1

我有一个像这样的 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()”)。

如何解决这个问题?

json symfony doctrine api-platform.com
1个回答
0
投票

这就是我使用的例子。 根据您的教义版本,它可能不起作用。

#[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

© www.soinside.com 2019 - 2024. All rights reserved.