我正在创建一个表单,其中可以容纳未定义数量的输入集合,这些集合在按“添加”按钮后出现。我正在遵循此文档: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
创建了自定义验证器答案 0 :(得分:0)
这些规则:
* @Assert\All({
* @Assert\Collection(
* fields = {
* "name" = {
* @Assert\NotBlank
* @Assert\Type("string")
* )
* },
* "desc" = {
* @Assert\NotBlank
* @Assert\Type("string")
* )
* }
* },
* allowMissingFields = false,
* allowExtraFields = false
* )
* })
应放在您要验证的每个字段的Tag
实体中