【问题标题】:Validating CollectionType array of object Symfony 4.2验证对象 Symfony 4.2 的 CollectionType 数组
【发布时间】: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


    【解决方案1】:

    这些规则:

    * @Assert\All({
     *     @Assert\Collection(
     *     fields = {
     *         "name" = {
     *              @Assert\NotBlank
     *              @Assert\Type("string")
     *             )
     *         },
     *         "desc" = {
     *              @Assert\NotBlank
     *              @Assert\Type("string")
     *             )
     *         }
     *     },
     *     allowMissingFields = false,
     *     allowExtraFields = false
     * )
     * })
    

    应放在Tag 实体中,在您要验证的每个字段上

    【讨论】:

    • 他们已经有 * @ORM\Column(type="string", length=255) * @Assert\NotBlank * @Assert\Type("string") */ 但他们没有在集合类型
    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 2016-06-01
    • 2012-10-21
    • 2012-11-13
    • 2022-11-25
    • 2020-07-30
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多