如何按顺序应用验证组

编辑本页

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

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

如何按顺序应用验证组

在某些情况下,您希望按步骤验证组。要做到这一点,可以使用GroupSequence特性。在这种情况下,一个对象定义了一个组序列,该序列决定了应该验证的订单组。

例如,假设你有一个用户类,并希望仅在所有其他验证都通过时验证用户名和密码是否不同(以避免出现多个错误消息)。

  • 注释
  • 属性
  • 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 25 26 27 28 29
/ / src /实体/ User.php名称空间应用程序实体使用ob娱乐下载组件安全核心用户用户界面使用ob娱乐下载组件验证器约束作为断言/ * * *@Assert\GroupSequence({"User", "Strict"}) */用户实现了用户界面/ * * *@Assert\ NotBlank * /私人用户名/ * * *@Assert\ NotBlank * /私人密码/ * * *@Assert\IsTrue(message="密码不能匹配您的用户名",groups={"严格"})*/公共函数isPasswordSafe()返回->用户名= = !->密码);}}

在本例中,它将首先验证组中的所有约束用户(与默认的组)。只有当该组中的所有约束都有效时,第二组,严格的,将被验证。

谨慎

正如你已经看到的如何仅应用所有验证约束的子集(验证组),默认的组和包含类名的组(例如。用户)。然而,当使用组序列时,它们不再相同。的默认的Group现在将引用组序列,而不是不属于任何组的所有约束。

这意味着您必须使用{名称}(如。用户)组。当使用默认的,你得到一个无限递归(如默认的组引用组序列,该组序列将包含默认的引用相同组序列的组,…)。

谨慎

调用validate ()使用序列为(严格的在前面的例子中)将导致验证只有这个基团,而不是序列中的所有基团。这是因为现在引用的是序列默认的组织验证。

属性中定义组序列validation_groups形式选择:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /形式/ MyType.php名称空间应用程序形式使用ob娱乐下载组件形式AbstractType使用ob娱乐下载组件OptionsResolverOptionsResolver使用ob娱乐下载组件验证器约束GroupSequence/ /……MyType扩展AbstractType/ /……公共函数configureOptions(OptionsResolver解析器解析器->setDefaults ([“validation_groups”= >GroupSequence ([“第一”“第二”))));}}

组序列提供程序

想象一个用户实体,可以是普通用户或高级用户。当它是高级用户时,应该向用户实体添加一些额外的约束(例如信用卡详细信息)。要动态确定应该激活哪些组,可以创建组序列提供程序。首先,创建实体和名为溢价

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /实体/ User.php名称空间应用程序实体使用ob娱乐下载组件验证器约束作为断言用户/ * * *@Assert\ NotBlank * /私人的名字/ * * *@Assert\ CardScheme(*计划={}“签证”,*组={"溢价 "}, * ) */私人信用卡/ /……

现在,更改用户要实现的类GroupSequenceProviderInterface并添加getGroupSequence (),方法,该方法应该返回要使用的组的数组:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src /实体/ User.php名称空间应用程序实体/ /……使用ob娱乐下载组件验证器GroupSequenceProviderInterface用户实现了GroupSequenceProviderInterface/ /……公共函数getGroupSequence()//当返回一个简单数组时,如果任何组中有违规//其余组不被验证。例如,如果“User”失败,// 'Premium'和'Api'是无效的:返回“用户”“溢价”“Api”];//返回嵌套数组时,每个数组中包含的所有组//被验证。例如,如果'User'失败,'Premium'也会被验证//(你也会得到它的违规)但'Api'不会被验证:返回[[“用户”“溢价”),“Api”];}}

最后,您必须通知Validator组件您的用户类提供了需要验证的组序列:

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12
/ / src /实体/ User.php名称空间应用程序实体/ /……/ * * *@Assert\ GroupSequenceProvider * /用户实现了GroupSequenceProviderInterface/ /……

如何在单个属性上按顺序应用约束

有时,您可能希望在单个属性上按顺序应用约束。的按顺序约束可以用比使用?更直接的方式解决这个问题吗GroupSequence

5.1

按顺序约束在Symfony 5.1中引入。ob娱乐下载

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