扩展ExpressionLanguage
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.4,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
扩展ExpressionLanguage
ExpressionLanguage可以扩展通过添加自定义功能。例如,在Symfony框架,安全检查用户的ob娱乐下载角色定制函数。
请注意
如果你想学习如何使用函数表达式中,读作“表达式语法”。
注册功能
在每个特定的注册功能ExpressionLanguage
实例。这意味着函数可以用于任何表达式执行的实例。
注册一个函数,使用注册()。这种方法有三个参数:
- 的名字一个表达式的函数的名称;
- 编译器——一个函数时执行编译使用的函数表达式;
- 评估者——一个函数时执行表达式进行求值。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;美元expressionLanguage=新ExpressionLanguage ();美元expressionLanguage- >注册(“小写”,函数(美元str){返回sprintf (”(is_string (% 1 $ s) ?函数(% 1 $ s): % 1 $ s) ',美元str);},函数(美元参数,美元str){如果(! is_string (美元str)){返回美元str;}返回函数美元str);});var_dump (美元expressionLanguage- >评估(“小写(“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
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionFunction;使用ob娱乐下载\组件\ExpressionLanguage\ExpressionFunctionProviderInterface;类StringExpressionLanguageProvider实现了ExpressionFunctionProviderInterface{公共函数getFunctions(){返回(新ExpressionFunction (“小写”,函数(美元str){返回sprintf (”(is_string (% 1 $ s) ?函数(% 1 $ s): % 1 $ s) ',美元str);},函数(美元参数,美元str){如果(! is_string (美元str)){返回美元str;}返回函数美元str);}));}}
提示
创建一个函数从一个PHP函数的表达式fromPhp ()静态方法:
1
ExpressionFunction::fromPhp (“strtoupper”);
名称空间支持功能,但他们要求第二个参数定义表达式的名称:
1
ExpressionFunction::fromPhp (“我的\ strtoupper”,“my_strtoupper”);
你可以注册供应商使用registerProvider ()或使用构造函数的第二个参数:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;/ /使用构造函数美元expressionLanguage=新ExpressionLanguage (零,(新StringExpressionLanguageProvider (),/ /……]);/ /使用registerProvider ()美元expressionLanguage- >registerProvider (新StringExpressionLanguageProvider ());
提示
建议创建你自己的ExpressionLanguage
类库。现在你可以添加扩展通过重写构造函数:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用Psr\缓存\CacheItemPoolInterface;使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage作为BaseExpressionLanguage;类ExpressionLanguage扩展BaseExpressionLanguage{公共函数__construct(CacheItemPoolInterface美元缓存= null,数组美元供应商= []){/ /默认加提供者允许用户覆盖它函数美元供应商,新StringExpressionLanguageProvider ());父::__construct (美元缓存,美元供应商);}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。