如何在 Api-Platform 中断言非空子资源?

How to assert not null subresource in Api-Platform?

我有 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,但是当我尝试 create/update 使用 {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."

那么为什么它会这样工作呢?我怎样才能让它在另一个订单中工作?

我前段时间遇到过这个问题,显然这是因为你的学说字段没有设置 nullable。 (@Assert\Type("float"))

在运行时 api-platform 检查你的 Doctrine 元数据并抛出 InvalidArgumentException 如果你的数据不符合标准。 (我也不喜欢这个 "feature",不知道他们为什么要这样做)。

要"fix",您将字段更改为@ORM\Column("float", nullable=true)

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