如何按顺序应用验证组吗
编辑该页面如何按顺序应用验证组吗
在某些情况下,你想要验证你的组织措施。要做到这一点,您可以使用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娱乐下载