表达语言组件

编辑本页

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

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

表达语言组件

ExpressionLanguage组件提供了一个可以编译和计算表达式的引擎。表达式是返回值的一行代码(主要是布尔值,但不限于此)。

安装

1
作曲家需要交响乐/表达语言欧宝娱乐app下载地址

请注意

如果在Symfony应用程序外部安装此组件,则必须要求欧宝娱乐app下载地址供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

表达式引擎如何帮助我?

该组件的目的是允许用户在配置中使用表达式来处理更复杂的逻辑。例如,Symfony框架在安全性、验证规则和路欧宝娱乐app下载地址由匹配中使用了表达式。

除了在框架本身中使用该组件外,ExpressionLanguage组件是一个完美的候选组件业务规则引擎.这个想法是让网站管理员在不使用PHP和不引入安全问题的情况下,以动态的方式配置内容:

1 2 3 4 5 6 7 8
#当article. commentcount > 100和article. getgroup()在['good_customers', 'collaborator']中获得特价类别不在["misc"] #当product.stock . #

表达式可以被视为一个非常受限的PHP沙盒,不受外部注入的影响,因为必须显式地声明表达式中哪些变量可用。

使用

ExpressionLanguage组件可以编译和求值表达式。表达式是一行程序,通常返回布尔值,可由在类中执行表达式的代码使用如果声明。表达式的一个简单例子是1 + 2.您还可以使用更复杂的表达式,例如someArray [3] .someMethod(酒吧)

该组件提供了两种处理表达式的方法:

  • 评价:表达式被求值而不被编译成PHP;
  • 编译:表达式被编译成PHP,因此它可以被缓存和求值。

组件的主类是ExpressionLanguage

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址组件ExpressionLanguageExpressionLanguageexpressionLanguageExpressionLanguage ();var_dump (expressionLanguage->评估(“1 + 2”));//显示3var_dump (expressionLanguage->编译(“1 + 2”));//显示(1 + 2)

表达式语法

看到表达式语法学习ExpressionLanguage组件的语法。

传入变量

你也可以将变量传递到表达式中,它可以是任何有效的PHP类型(包括对象):

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用欧宝娱乐app下载地址组件ExpressionLanguageExpressionLanguageexpressionLanguageExpressionLanguage ();苹果公共各种;}苹果苹果();苹果->各种=“密脆”;var_dump (expressionLanguage->评估(“fruit.variety”, (“水果”= >苹果,]));//显示"Honeycrisp"

有关更多信息,请参见表达式语法条目,尤其是表达式语法而且表达式语法

谨慎

在表达式中使用变量时,避免将不可信的数据传递到变量数组中。如果无法避免这种情况,请清除不受信任数据中的非字母数字字符,以防止恶意用户注入控制字符并更改表达式。

缓存

该组件提供了一些不同的缓存策略,请在使用解析器缓存缓存表达式

AST转储和编辑

AST (抽象语法树)的表达式可以转储和操作,如转储和操作表达式的AST

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