表达式

编辑本页

表达式

此约束允许您使用表达式对于更复杂的动态验证。看到基本用法举个例子。看到回调对于给您类似灵活性的不同约束。

适用于 属性/方法
表达式
验证器 ExpressionValidator

基本用法

假设你有一门课博客类别而且isTechnicalPost属性:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ / src /模型/ BlogPost.php名称空间应用程序模型使用欧宝娱乐app下载地址组件验证器约束作为断言博客私人类别私人isTechnicalPost/ /……公共函数getCategory()返回->类别;}公共函数setIsTechnicalPostisTechnicalPost->isTechnicalPost =isTechnicalPost;}/ /……

为了验证对象,您有一些特殊的要求:

)如果isTechnicalPost是真的,那么类别肯定是其中之一php
欧宝娱乐app下载地址

B)如果isTechnicalPost是假的,那么类别可以是任何东西。

实现这一点的一种方法是使用Expression约束:

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /模型/ BlogPost.php名称空间应用程序模型使用欧宝娱乐app下载地址组件验证器约束作为断言/ * * *@Assert\Expression(* "this. getcategory () in ['php', 欧宝娱乐app下载地址'symfony'] or !this. istechnicalpost ()", * message="如果这是一个技术帖子,类别应该是php或symfony!"*) */博客/ /……

表达式选项是表达式,必须返回true才能通过验证。有关表达式语言语法的详细信息,请参见表达式语法

您还可以将约束附加到特定的属性,并仍然根据整个实体的值进行验证。如果希望将错误附加到特定字段,这非常方便。在这种情况下,价值表示的值isTechnicalPost

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /模型/ BlogPost.php名称空间应用程序模型使用欧宝娱乐app下载地址组件验证器约束作为断言博客/ /……/ * * *@Assert\Expression(* "this. getcategory () in ['php', 欧宝娱乐app下载地址'symfony'] or value == false", * message="如果这是一篇科技文章,类别应该是php或symfony!"*) */私人isTechnicalPost/ /……

有关表达式和可用变量的详细信息,请参见表达式选项详情如下。

选项

表达式

类型字符串默认的选项

要求值的表达式。如果表达式的计算结果为假值(使用= =,而不是= = =),验证将失败。

有关表达式语言语法的详细信息,请参见表达式语法

在表达式内部,你最多可以访问2个变量:

根据你如何使用约束,你可以在你的表达式中访问1或2个变量:

  • :正在验证的对象(例如BlogPost的实例);
  • 价值:正在验证的属性的值(仅当约束直接应用到属性时可用);

类型数组|字符串

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

消息

类型字符串默认的此值无效。

表达式求值为false时提供的默认消息。

您可以在此消息中使用以下参数:

参数 描述
{{value}} 当前(无效)值
{{label}} 对应的表单字段标签

5.2

{{label}}参数在Symfony 5.2中引入。欧宝娱乐app下载地址

有效载荷

类型混合默认的

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

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

类型数组默认的[]

表达式中使用的自定义变量的值。值可以是任何类型(数值、布尔值、字符串、空值等)。

  • 注释
  • 属性
  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /模型/ Analysis.php名称空间应用程序模型使用欧宝娱乐app下载地址组件验证器约束作为断言分析/ * * *@Assert\表达式(* "value + error_margin < threshold", * values = {"error_margin": 0.25, "threshold": 1.5} *) */私人度规/ /……
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 5.4支持通过私人Packagist