回调
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
回调
Callback约束的目的是创建完全自定义的验证规则,并将任何验证错误分配到对象上的特定字段。如果对表单使用验证,这意味着可以让这些自定义错误显示在特定字段旁边,而不是简单地显示在表单顶部。
这个过程通过指定一个或多个来工作回调方法,每个方法都将在验证过程中被调用。每个方法都可以做任何事情,包括创建和分配验证错误。
请注意
回调方法本身不需要失败或返回任何值。相反,正如您将在示例中看到的,回调方法具有直接添加验证器“违规”的能力。
适用于 | 类 |
选项 | |
类 | 回调 |
验证器 | CallbackValidator |
配置
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src / AppBundle /实体/ Author.php名称空间AppBundle\实体;使用ob娱乐下载\组件\验证器\约束作为断言;使用ob娱乐下载\组件\验证器\上下文\ExecutionContextInterface;//如果你正在使用旧的2.4验证API,你将需要这个//使用Symob娱乐下载fony\Component\Validator\ExecutionContextInterface;类作者{/ * * *@Assert\调* /公共函数验证(ExecutionContextInterface$上下文){/ /……}}
回调方法
回调方法被传递一个特殊的ExecutionContextInterface
对象。你可以直接在这个对象上设置“违规”,并确定这些错误应该归于哪个字段:
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 30 31 32
/ /……使用ob娱乐下载\组件\验证器\上下文\ExecutionContextInterface;//如果你正在使用旧的2.4验证API,你将需要这个//使用Symob娱乐下载fony\Component\Validator\ExecutionContextInterface;类作者{/ /……私人$firstName;公共函数验证(ExecutionContextInterface$上下文){//你有一个“假名字”数组$fakeNames=数组(/ *……* /);//检查该名称是否为假名称如果(in_array ($这->getFirstName (),$fakeNames)) {//如果你正在使用新的2.5验证API(你可能是!)$上下文->buildViolation (“这个名字听起来完全是假的!”)->atPath (“firstName”)->addViolation ();//如果你正在使用旧的2.4验证API/* $context->addViolationAt('firstName', '这个名字听起来完全是假的!”);* /}}}
静态的回调
您还可以将约束用于静态方法。因为静态方法不能访问对象实例,所以它们将对象作为第一个参数接收:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
公共静态函数验证($对象, ExecutionContextInterface$上下文){//你有一个“假名字”数组$fakeNames=数组(/ *……* /);//检查该名称是否为假名称如果(in_array ($对象->getFirstName (),$fakeNames)) {//如果你正在使用新的2.5验证API(你可能是!)$上下文->buildViolation (“这个名字听起来完全是假的!”)->atPath (“firstName”)->addViolation ();//如果你正在使用旧的2.4验证API/* $context->addViolationAt('firstName', '这个名字听起来完全是假的!”);* /}}
外部回调和闭包
如果您想要执行一个静态回调方法,该方法不在已验证对象的类中,您可以将约束配置为调用PHP所支持的可调用数组call_user_func函数。假设你的验证函数是Acme \验证器:validate ()
:
12 3 4 5 6 7 8 9 10 11 12 13
名称空间Acme;使用ob娱乐下载\组件\验证器\上下文\ExecutionContextInterface;//如果你正在使用旧的2.4验证API,你将需要这个//使用Symob娱乐下载fony\Component\Validator\ExecutionContextInterface;类验证器{公共静态函数验证($对象, ExecutionContextInterface$上下文){/ /……}}
然后你可以使用下面的配置来调用这个验证器:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
/ / src / AppBundle /实体/ Author.php名称空间AppBundle\实体;使用ob娱乐下载\组件\验证器\约束作为断言;/ * * *@Assert\Callback({"Acme\Validator", "validate"}) */类作者{}
请注意
回调约束不支持全局回调函数,也不可能将全局函数或服务方法指定为回调。为了验证服务的使用,您应该这样做创建一个自定义验证约束并将新约束添加到类中。
当通过PHP配置约束时,你也可以传递一个闭包给Callback约束的构造函数:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ / src / AppBundle /实体/ Author.php名称空间AppBundle\实体;使用ob娱乐下载\组件\验证器\上下文\ExecutionContextInterface;//如果你正在使用旧的2.4验证API,你将需要这个//使用Symob娱乐下载fony\Component\Validator\ExecutionContextInterface;使用ob娱乐下载\组件\验证器\映射\ClassMetadata;使用ob娱乐下载\组件\验证器\约束作为断言;类作者{公共静态函数loadValidatorMetadata(ClassMetadata$元数据){$回调=函数($对象, ExecutionContextInterface$上下文){/ /……};$元数据->addConstraint (新维护\回调($回调));}}
选项
回调
类型:字符串
,数组
或关闭
[默认的选项]
callback选项接受三种不同的格式来指定callback方法:
- 一个字符串包含具体方法或静态方法的名称;
- 格式可调用的数组
阵列(<课程>,<法>)
; - 一个闭包。
具体回调函数接收ExecutionContextInterface实例作为唯一参数。
静态或闭包回调将已验证的对象作为第一个参数接收ExecutionContextInterfaceInstance作为第二个参数。