如何在 symfony2 验证程序中允许空值

2022-08-30 16:01:46

我想仅在值不为空时对对象属性应用验证器,即。

现在标准的符号行为:

class Entity
{
    /**
     * @ORM\Column(type="string", nullable=true)
     * @Assert\Email()
     */
    protected $email;
    (...)
}

如果电子邮件为空或空字符串,则该对象将无法通过验证,有没有办法告诉验证程序断言为有效的空值,并且仅在字段有数据时才进行验证?

PS 我知道我可以编写回调验证器,但是为每个字段编写回调只是为了具有“allowEmpty”功能并不是那么好。


答案 1

必须在类中为所有可选字段显式设置。下面是描述字段类型选项的段落。'required' => falseFormBuilder


编辑。得到相当多的反对票。默认情况下,所有验证程序都将值视为有效,但 和 除外。这两者都没有在问题中使用。问题隐式地是如何关闭默认情况下打开的客户端属性。nullNotNullNotEmptyrequired


答案 2

设置该选项不是解决方案:required

另请注意,将所需选项设置为 true 不会导致应用服务器端验证。换句话说,如果用户为字段提交了空白值(例如,使用旧浏览器或 Web 服务),则除非您使用 Symfony 的 NotBlank 或 NotNull 验证约束,否则它将被接受为有效值。

http://symfony.com/doc/current/book/forms.html#field-type-options

对于我的自定义验证器,我添加了一个

if (null == $value) {
    return true;
}

到方法。但是,我不确定标准验证器类的最佳方法是什么。isValid()


推荐