ExpressionLanguage组件

编辑该页面

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

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

ExpressionLanguage组件

ExpressionLanguage组件提供了一个引擎,这个引擎可以编译和评估表达式。一个表达式是一个一行程序,返回一个值(通常,但不限于,布尔值)。

安装

1
美元作曲家需要symfony /表达式欧宝娱乐app下载地址语言

请注意

如果你安装这个组件之外的Symfony应用程序,你必须要求欧宝娱乐app下载地址供应商/ autoload.php文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。

表达式引擎怎么能帮助我吗?

组件的目的是允许用户使用更复杂的逻辑表达式内部配置。对于一些例子,Symfony框架使用表达式在安欧宝娱乐app下载地址全、验证规则和路线匹配。

除了使用组件框架本身,ExpressionLanguage组件是一个完美的候选人的基础业务规则引擎。这个想法是为了让一个网站的站长配置在一个动态的方式不使用PHP和不引入安全问题:

1 2 3 4 5 6 7 8
#获取特价如果user.getGroup () (“good_customers”、“合作者”)# article.commentCount时促进文章首页> 100条。类别不(misc”) # product.stock时发送警报

表达式可以被视为一个非常限制PHP沙箱和不受外部注入您必须显式地声明的变量在一个表达式。

使用

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

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

  • 评价:没有被编译PHP计算表达式;
  • 编译:表达式编译PHP,所以它可以缓存和评估。

组件的主类ExpressionLanguage:

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

表达式语法

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

传递变量

还可以通过变量的表达式,它可以是任何有效的PHP类型(包括对象):

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

有关更多信息,请参见表达式语法条目,尤其是处理对象使用数组

谨慎

当使用变量表达式,避免将不可信数据的数组变量。如果无法避免,sanitize非字母数字的字符不可信的数据,以防止恶意用户注入控制字符和改变表达式。

缓存

组件提供了一些不同的缓存策略,阅读更多关于他们使用解析器缓存缓存表达式

AST倾销和编辑

AST (抽象语法树)的表达式可以作为解释倾倒和操纵倾销和操纵AST的表达式

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
欧宝娱乐app下载地址Symfony 5.3支持通过JoliCode