如何仅应用所有验证约束的子集(验证组)
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,现已不再维护。
读本页的更新版本用于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许可证。