回调

编辑本页

警告:您正在浏览的文档欧宝官网下载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作为第二个参数。

有效载荷

类型混合默认的

此选项可用于将任意特定于领域的数据附加到约束。已配置的有效负载不由Validator组件使用,但其处理完全取决于您。

例如,您可能想使用若干错误级别根据错误的严重程度,在前端以不同的方式呈现失败的约束。

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