回调

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

回调

Callback约束的目的是创建完全自定义的验证规则,并将任何验证错误分配到对象上的特定字段。如果您对表单使用验证,这意味着您可以将自定义错误显示在它们应用的字段旁边,而不是显示在表单顶部。

这个过程通过指定一个或多个来工作回调方法,每个方法都将在验证过程中被调用。每个方法都可以做任何事情,包括创建和分配验证错误。

请注意

回调方法本身不需要失败或返回任何值。相反,正如您将在示例中看到的,回调方法具有直接添加验证器“违规”的能力。

适用于 属性/方法
回调
验证器 CallbackValidator

配置

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /实体/ Author.php名称空间应用程序实体使用欧宝娱乐app下载地址组件验证器约束作为断言使用欧宝娱乐app下载地址组件验证器上下文ExecutionContextInterface作者/ * * *@Assert\调* /公共函数验证(ExecutionContextInterface上下文有效载荷/ /……}}

回调方法

回调方法被传递一个特殊的ExecutionContextInterface对象。你可以直接在这个对象上设置“违规”,并确定这些错误应该归于哪个字段:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ /……使用欧宝娱乐app下载地址组件验证器上下文ExecutionContextInterface作者/ /……私人firstName公共函数验证(ExecutionContextInterface上下文有效载荷//你有一个“假名字”数组fakeNames= (/ *……* /];//检查该名称是否为假名称如果(in_array (->getFirstName (),fakeNames)) {上下文->buildViolation (“这个名字听起来完全是假的!”->atPath (“firstName”->addViolation ();}}}

静态的回调

您还可以将约束用于静态方法。因为静态方法不能访问对象实例,所以它们将对象作为第一个参数接收:

12 3 4 5 6 7 8 9 10 11 12 13
公共静态函数验证对象, ExecutionContextInterface上下文有效载荷//你有一个“假名字”数组fakeNames= (/ *……* /];//检查该名称是否为假名称如果(in_array (对象->getFirstName (),fakeNames)) {上下文->buildViolation (“这个名字听起来完全是假的!”->atPath (“firstName”->addViolation ();}}

外部回调和闭包

如果您想要执行一个静态回调方法,该方法不在已验证对象的类中,您可以将约束配置为调用PHP所支持的可调用数组call_user_func函数。假设你的验证函数是Acme \验证器:validate ()

1 2 3 4 5 6 7 8 9 10 11
名称空间Acme使用欧宝娱乐app下载地址组件验证器上下文ExecutionContextInterface验证器公共静态函数验证对象, ExecutionContextInterface上下文有效载荷/ /……}}

然后你可以使用下面的配置来调用这个验证器:

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11
/ / src /实体/ Author.php名称空间应用程序实体使用欧宝娱乐app下载地址组件验证器约束作为断言/ * * *@Assert\Callback({"Acme\Validator", "validate"}) */作者{}

请注意

回调约束支持全局回调函数,也不可能将全局函数或服务方法指定为回调。为了验证服务的使用,您应该这样做创建一个自定义验证约束并将新约束添加到类中。

当通过PHP配置约束时,你也可以传递一个闭包给Callback约束的构造函数:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /实体/ Author.php名称空间应用程序实体使用欧宝娱乐app下载地址组件验证器约束作为断言使用欧宝娱乐app下载地址组件验证器上下文ExecutionContextInterface使用欧宝娱乐app下载地址组件验证器映射ClassMetadata作者公共静态函数loadValidatorMetadata(ClassMetadata元数据回调函数对象, ExecutionContextInterface上下文有效载荷/ /……};元数据->addConstraint (维护\回调(回调));}}

警告

使用一个关闭与注释配置一起将禁用该类/属性/方法的注释缓存,因为关闭不能被缓存。为了获得最佳性能,建议使用静态回调方法。

选项

回调

类型字符串数组关闭默认的选项

callback选项接受三种不同的格式来指定callback方法:

  • 一个字符串包含具体方法或静态方法的名称;
  • 格式可调用的数组方法类(“< >”、“< >”)
  • 一个闭包。

具体回调函数接收ExecutionContextInterface实例作为唯一参数。

静态或闭包回调将已验证的对象作为第一个参数接收ExecutionContextInterfaceInstance作为第二个参数。

类型数组|字符串

它定义了这个约束的一个或多个验证组。阅读更多验证组

有效载荷

类型混合默认的

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

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

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 5.3支持通过JoliCode