【问题标题】:Symfony 4 - Multi assert difficultsSymfony 4 - 多断言困难
【发布时间】:2019-12-04 15:28:38
【问题描述】:

在我的 symfony 项目中,我有一个具有此字段的实体:

/**
 * Solde
 * @ORM\Column(type="float", nullable=true)
 */
private $solde;

该字段可以为null,等于0或大于0但不能为负数。

所以我想知道如何组织该字段的断言?

我可以这样做吗?

 /**
 * @Assert\!Negative
 */

否则我应该使用的断言是:

/ ** 
 * @Assert \ Null () 
 * @Assert\GreaterThanOrEqual(0)
 * / 

但是如果我同时使用,可能会出现问题,因为一个必须确保值为零,另一个必须验证它是正数还是等于 0

【问题讨论】:

  • 就我的理解而言,仅使用GreaterThanOrEqual(0) 似乎最合适。 !Negative 是不可能的。如果你真的想拥有自己的特定约束,这样你只需要一个,你可以编写一个自定义约束。见:symfony.com/doc/current/validation/custom_constraint.html
  • Null 仅专门检查null,而不是零。默认情况下GreaterThanOrEqual(0) 也将允许null。您可以在Test 中看到这一点。当输入值null 给定时,@Assert\GreaterThanOrEqual(1) 将通过
  • 是的,我做了PositivOrZero,是一样的吗?它有效

标签: symfony validation constraints assert


【解决方案1】:

如果你使用 Symfony 4.3+,你可以使用PositiveOrZero:

/**
 * @Assert\PositiveOrZero
 */

如果将此与 nullable=true 结合使用,则所有正数、0null 都将有效。

对于旧版本的 Symfony,您可以使用:

/**
 * @Assert\GreaterThanOrEqual(0)
 */

再次使用nullable=true,您将获得相同的效果。

【讨论】:

  • 非常感谢
【解决方案2】:

或者您可以使用其逻辑集创建自己的验证器 enter link description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多