Как отстаивать не нулевой подресурс в Api-Platform? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть 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 голосов
/ 19 сентября 2018

У меня была именно эта проблема некоторое время назад, по-видимому, это потому, что ваше поле доктрины установлено не nullable.(@Assert\Type("float"))

Во время выполнения api-платформа проверяет ваши метаданные Doctrine и выдает InvalidArgumentException, если ваши данные не соответствуют критериям.(Мне также не нравится эта «особенность», не знаю, зачем они это делают).

Чтобы «исправить» это, вы измените свое поле на @ORM\Column("float", nullable=true)

Это такжеможно переопределить сервис api_platform.doctrine.orm.metadata.property.metadata_factory и изменить его поведение, игнорируя доктрину nullable.

...