扩展表达语言
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 3.0,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
扩展表达语言
可以通过添加自定义函数来扩展ExpressionLanguage。例如,在Symfony框架中,安全性具有检ob娱乐下载查用户角色的自定义函数。
请注意
如果您想了解如何在表达式中使用函数,请阅读“表达式语法".
注册功能
函数被注册在每个特定的函数上ExpressionLanguage
实例。这意味着函数可以在该实例执行的任何表达式中使用。
要注册一个函数,使用注册().这个方法有3个参数:
- 的名字-表达式中函数的名称;
- 编译器-在使用该函数编译表达式时执行的函数;
- 评估者—表达式求值时执行的函数。
12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;$语言=新ExpressionLanguage ();$语言->注册(“小写”,函数($str){返回sprintf (”(is_string (% 1 $ s) ?strotolower (%1$s): %1$s)',$str);},函数($参数,$str){如果(!is_string ($str)) {返回$str;}返回函数$str);});var_dump ($语言->评估(“小写(“HELLO”)”));
这将打印你好
.这两个编译器而且评估者通过一个参数
变量作为第一个参数,它等于第二个参数evaluate ()
或编译()
(例如,求值时使用“值”,编译时使用“名称”)。
使用表达式提供程序
当你使用ExpressionLanguage
类时,通常希望添加自定义函数。为此,可以通过创建实现的类来创建新的表达式提供程序ExpressionFunctionProviderInterface.
该接口需要一个方法:
getFunctions ()的实例,返回表达式函数的数组ExpressionFunction)登记。
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionFunction;使用ob娱乐下载\组件\ExpressionLanguage\ExpressionFunctionProviderInterface;类StringExpressionLanguageProvider实现了ExpressionFunctionProviderInterface{公共函数getFunctions(){返回数组(新ExpressionFunction (“小写”,函数($str){返回sprintf (”(is_string (% 1 $ s) ?strotolower (%1$s): %1$s)',$str);},函数($参数,$str){如果(!is_string ($str)) {返回$str;}返回函数$str);}));}}
您可以使用registerProvider ()或者使用构造函数的第二个参数:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;//使用构造函数$语言=新ExpressionLanguage (零,数组(新StringExpressionLanguageProvider (),/ /……));//使用registerProvider()$语言->registerProvider (新StringExpressionLanguageProvider ());
提示
建议您自己创建ExpressionLanguage
在你的图书馆上课。现在你可以通过重写构造函数来添加扩展:
12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage作为BaseExpressionLanguage;使用ob娱乐下载\组件\ExpressionLanguage\ParserCache\ParserCacheInterface;类ExpressionLanguage扩展BaseExpressionLanguage{公共函数__construct(ParserCacheInterface$解析器= null,数组$供应商=数组()){//预先设置默认提供程序,让用户轻松重写它函数$供应商,新StringExpressionLanguageProvider ());父::__construct ($解析器,$供应商);}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。