【问题标题】:Validation of Unique Entity唯一实体的验证
【发布时间】:2014-05-21 07:06:51
【问题描述】:

我有一个帐户实体,其中包含用户实体和客户实体的外键约束。

我正在尝试验证客户 ID 是数字而不是 null。加上 user_id 和 customer_id 的唯一约束。

我的问题是无论 customer_id 类型的结果如何,Class Constraint UniqueEntity 都会被触发:数字验证结果。抛出 500 因为 customer_id 列是整数。

我需要做的是,在检查唯一约束之前验证 customer_id 是一个有效的 id(数字而不是 null)。或者有没有其他方法可以避免 symfony/doctrine 去 db 测试一个无效的 id?

我的验证配置,

MY\ApplicationBundle\Entity\Account:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: [ user_id, customer_id ]
            message: Customer Id already exists for User
    properties:
        customer_id:
            - Type:
                type: numeric
                message: Customer Id should be an integer.
            - NotBlank:
                message: Customer cannot be blank.

【问题讨论】:

  • 我应该添加这是一个 api 调用,我不提供来自 symfony 模板的表单。发送像“test”这样的字符串作为客户 ID 会引发这些 sql 错误。如果不需要,我看不到额外的 db 调用的意义。如果你能定义一个依赖验证树就好了。
  • 我相信组序列可能会实现。也许这对你有帮助:symfony.com/doc/current/book/validation.html#group-sequence

标签: validation symfony doctrine-orm


【解决方案1】:

Group Sequences 应该在这里解决您的问题。类似的东西应该可以工作:

MY\ApplicationBundle\Entity\Account:
    group_sequence:
        - Basic
        - Account
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: [ user_id, customer_id ]
            message: Customer Id already exists for User
    properties:
        customer_id:
            - Type:
                type: numeric
                message: Customer Id should be an integer.
                groups: [Basic]
            - NotBlank:
                message: Customer cannot be blank.
                groups: [Basic]

使用组序列,您可以定义验证的顺序。 Basic 检查组 Basic 的所有约束,Account 检查此实体的其他约束。

【讨论】:

  • 如果 Basic 组失败,Account 组将无法运行?
猜你喜欢
  • 2016-07-19
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多