【发布时间】:2019-02-19 14:52:10
【问题描述】:
我正在创建一个表单,它可以在内部保存未定义数量的输入集合,这些集合在按下“添加”按钮后出现。我正在关注此文档:https://symfony.com/doc/current/form/form_collections.html,一切似乎都运行良好。我可以添加、删除、保存和编辑主表单和输入集合。现在我正在尝试验证输入,但在验证 CollectionType 实体时遇到问题。 对于主要表单输入,我使用如下验证:
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank
* @Assert\Type("string")
*/
private $name;
对于 CollectionType,我的验证如下:
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Tag", cascade={"persist"})
* @Assert\All({
* @Assert\Collection(
* fields = {
* "name" = {
* @Assert\NotBlank
* @Assert\Type("string")
* )
* },
* "desc" = {
* @Assert\NotBlank
* @Assert\Type("string")
* )
* }
* },
* allowMissingFields = false,
* allowExtraFields = false
* )
* })
*
*/
private $tags;
我收到此错误:
This value should be of type array|(Traversable&ArrayAccess).
我不知道这是否有帮助,但是通过转储表单错误我可以看到:
-propertyPath: "data.tags[0]"
-invalidValue: Tag {#850 ▼
-id: null
-name: null
-desc: null
}
我也定义了对 Tag 实体变量的验证,但它仍然不起作用。
如果我删除“@Assert\All”部分,我会得到:
This field is missing.
data.tags[name] 和 data.tags[desc] 错误。 还有:
This field was not expected.
对于 data.tags[0]
编辑: 我最终根据https://symfony.com/doc/current/validation/custom_constraint.html
创建了自定义验证器【问题讨论】:
标签: symfony validation symfony4