如何按顺序应用验证组吗

编辑该页面

如何按顺序应用验证组吗

在某些情况下,你想要验证你的组织措施。要做到这一点,您可以使用GroupSequence特性。在这种情况下,一个对象定义了一组序列,它决定了订单组应该验证。

例如,假设您有一个用户类和想要验证用户名和密码是不同的只有在其他所有验证通过(为了避免多个错误消息)。

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
1 2 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({“用户”、“严格”})* /用户实现了用户界面{/ * * *@Assert\ NotBlank * /私人美元用户名;/ * * *@Assert\ NotBlank * /私人美元密码;/ * * *@Assert\ IsTrue(消息=“密码不能匹配你的用户名”,组={“严格”})* /公共函数isPasswordSafe(){返回(美元- >用户名= = !美元- >密码);}}

在本例中,它会首先验证约束用户(这是一样的默认的组)。只有在所有组有效约束,第二组,严格的将验证。

谨慎

正如您所看到的那样如何应用只有一个子集的验证约束(验证组),默认的组和组包含类名(如。用户)是相同的。然而,当使用组序列,他们不再是相同的。的默认的组将引用组序列,而不是所有不属于任何群体的约束。

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

谨慎

调用validate ()与一组序列(严格的在前一个例子)将导致验证只有与集团,而不是所有的组织序列。这是因为现在被称为序列默认的组织验证。

您还可以定义一组序列中validation_groups形式选择:

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

组序列提供者

想象一个用户实体可以是一个普通用户或高级用户。高端用户的时候,用户应该添加一些额外的约束实体(例如信用卡详细信息)。动态地确定哪些团体应该被激活,您可以创建一组序列提供者。首先,创建实体和一个新的约束组织溢价:

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

现在,改变用户类来实现GroupSequenceProviderInterface并添加getGroupSequence ()组,方法应该返回一个数组,使用:

1 2 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(){/ /返回一个简单的数组时,如果有违反任何组/ /其他组不验证。例如,如果“用户”失败,/ /“溢价”和“Api”不验证:返回(“用户”,“溢价”,“Api”];/ /当返回一个嵌套的数组,每个数组中的所有团体包括/ /验证。例如:如果“用户”失败,“溢价”也验证/ /(和你会得到它的侵犯),但“Api”不会验证:返回[[“用户”,“溢价”),“Api”];}}

最后,你必须通知你的验证器组件用户类提供了一系列的团体进行验证:

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

如何按顺序应用限制一个属性

有时,您可能想在一个属性上应用顺序约束。的按顺序约束可以为你解决这个比使用更简单的方法吗GroupSequence

5.1

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

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
ob娱乐下载Symfony 5.4支持通过私人Packagist