如何在Api平台中断言不为null的子资源?

时间:2018-09-19 14:33:30

标签: symfony api-platform.com

我有2个实体:

class Act 
{
    /**
     * @Assert\Count(min=1)
     * @Assert\Valid(traverse=true)
     * @ORM\OneToMany(targetEntity="App\Entity\ActItem", mappedBy="act", cascade={"persist"})
     */
    private $items;
}

class ActItem 
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Act", inversedBy="items")
     * @ORM\JoinColumn(nullable=false)
     */
    private $act;

    /**
     * @Assert\NotNull
     * @Assert\Type("float")
     *
     * @ORM\Column(type="float")
     */
    private $count;
}

ActItem具有 Assert \ NotNull ,但是当我尝试使用类似{count:null}的项来创建/更新行为时,我会得到响应:

hydra:description: "The type of the "count" attribute must be "float", "NULL" given."

我注意到,如果删除@ORM \ Column(type =“ float”),则会得到:

hydra:description: "items[0].count: This value should not be blank."

那么为什么它如此工作?我怎样才能使其按其他顺序工作?

1 个答案:

答案 0 :(得分:0)

我前段时间遇到了这个确切的问题,显然是因为您的学说字段设置为非nullable。 (@Assert\Type("float")

在运行时api平台期间,如果您的数据不符合标准,则检查您的Doctrine元数据并抛出InvalidArgumentException。 (我也不喜欢这种“功能”,不确定为什么要这么做)。

要“修复”此问题,请将字段更改为@ORM\Column("float", nullable=true)

还可以覆盖api_platform.doctrine.orm.metadata.property.metadata_factory服务并更改其行为以忽略原则nullable