扩展ExpressionLanguage

编辑该页面

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

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

扩展ExpressionLanguage

ExpressionLanguage可以扩展通过添加自定义功能。例如,在Symfony框架,安全检查用户的欧宝娱乐app下载地址角色定制函数。

请注意

如果你想学习如何使用函数表达式中,读作“表达式语法”。

注册功能

在每个特定的注册功能ExpressionLanguage实例。这意味着函数可以用于任何表达式执行的实例。

注册一个函数,使用注册()。这种方法有三个参数:

  • 的名字一个表达式的函数的名称;
  • 编译器——一个函数时执行编译使用的函数表达式;
  • 评估者——一个函数时执行表达式进行求值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ExpressionLanguage;美元语言=ExpressionLanguage ();美元语言- >注册(“小写”,函数(美元str){返回sprintf (”(is_string (% 1 $ s) ?函数(% 1 $ s): % 1 $ s) ',美元str);},函数(美元参数,美元str){如果(! is_string (美元str)){返回美元str;}返回函数美元str);});var_dump (美元语言- >评估(“小写(“HELLO”)”));

这将打印你好。这两个编译器评估者传递一个参数变量作为第一个参数,等于第二个参数evaluate ()编译()(如“价值观”在评估或“名称”,如果编译)。

使用表达式提供者

当你使用ExpressionLanguage类库,你经常要添加自定义功能。为此,您可以创建一个新的表达式提供者通过创建一个类实现ExpressionFunctionProviderInterface

这个接口需要一个方法:
getFunctions ()返回一个数组的表达功能的实例ExpressionFunction)注册。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ExpressionFunction;使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ExpressionFunctionProviderInterface;StringExpressionLanguageProvider实现了ExpressionFunctionProviderInterface{公共函数getFunctions(){返回数组(ExpressionFunction (“小写”,函数(美元str){返回sprintf (”(is_string (% 1 $ s) ?函数(% 1 $ s): % 1 $ s) ',美元str);},函数(美元参数,美元str){如果(! is_string (美元str)){返回美元str;}返回函数美元str);}));}}

你可以注册供应商使用registerProvider ()或使用构造函数的第二个参数:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ExpressionLanguage;/ /使用构造函数美元语言=ExpressionLanguage (,数组(StringExpressionLanguageProvider (),/ /……));/ /使用registerProvider ()美元语言- >registerProvider (StringExpressionLanguageProvider ());

提示

建议创建你自己的ExpressionLanguage类库。现在你可以添加扩展通过重写构造函数:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ExpressionLanguage作为BaseExpressionLanguage;使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ParserCache\ParserCacheInterface;ExpressionLanguage扩展BaseExpressionLanguage{公共函数__construct(ParserCacheInterface美元解析器= null,数组美元供应商=数组()){/ /预谋默认提供程序让用户轻松覆盖它函数美元供应商,StringExpressionLanguageProvider ());::__construct (美元解析器,美元供应商);}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。