如何仅应用所有验证约束的子集(验证组)

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何仅应用所有验证约束的子集(验证组)

默认情况下,在验证一个对象时,将检查该类的所有约束是否实际通过。然而,在某些情况下,您只需要验证对象一些该类的约束。为此,您可以将每个约束组织到一个或多个“验证组”中,然后仅对一组约束应用验证。

例如,假设你有一个用户类,在用户注册和稍后用户更新其联系信息时都使用:

  • 注释
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /实体/ User.php名称空间应用程序实体使用ob娱乐下载组件安全核心用户用户界面使用ob娱乐下载组件验证器约束作为断言用户实现了用户界面/ * * *@Assert\电子邮件(组={}“注册”)* /私人电子邮件/ * * *@Assert\ NotBlank(组={}“注册”)*@Assert\长度(min=7, groups={"registration"}) */私人密码/ * * *@Assert\ (min = 2)长度* /私人城市;}

在这个配置中,有三个验证组:

默认的
包含当前类中的约束以及不属于其他组的所有引用类。
用户
的所有约束用户对象中的默认的组。这总是类的名称。这和默认的如何按顺序应用验证组
登记
控件上的约束电子邮件而且密码字段。

限制条件默认的类的Group是没有配置显式组或配置为等于类名或字符串的组的约束默认的

谨慎

当验证只是和User对象没有区别默认的组和用户组。但是,如果用户具有嵌入对象。例如,想象一下用户有一个地址属性,该属性包含地址对象,并且您已经添加了有效的约束设置为此属性,以便在验证用户对象。

如果你验证用户使用默认的组,然后对地址类中的默认的集团被使用。但是,如果你验证用户使用用户验证组,则只对约束地址类的用户组将被验证。

换句话说,默认的组和类名组(例如。用户)是相同的,除非类嵌入到另一个对象中,而这个对象实际上是正在验证的对象。

如果你有继承(例如:扩展BaseUser),然后用子类的类名进行验证。用户)中的所有约束用户而且BaseUser将被验证。然而,如果您使用基类(即。BaseUser的默认约束BaseUser类将被验证。

属性的第三个参数传递一个或多个组名,以告诉验证器使用特定的组validate ()方法:

1
错误验证器->validate (作者, (“注册”]);

如果未指定组,则属于该组的所有约束默认的将被应用。

在全堆栈Symfony项目中,您ob娱乐下载通常会通过表单库间接地使用验证。有关如何在表单中使用验证组的信息,请参见如何定义要使用的验证组

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。