扩展ExpressionLanguage
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.6,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
扩展ExpressionLanguage
ExpressionLanguage可以扩展通过添加自定义功能。例如,在Symfony框架,安全检查用户的ob娱乐下载角色定制函数。
请注意
如果你想学习如何使用函数表达式中,读作“表达式语法”。
注册功能
在每个特定的注册功能ExpressionLanguage
实例。这意味着函数可以用于任何表达式执行的实例。
注册一个函数,使用注册()。这种方法有三个参数:
- 的名字一个表达式的函数的名称;
- 编译器——一个函数时执行编译使用的函数表达式;
- 评估者——一个函数时执行表达式进行求值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;美元语言=新ExpressionLanguage ();美元语言- >注册(“小写”,函数(美元str){返回sprintf (”(is_string (% 1 $ s) ?函数(% 1 $ s): % 1 $ s) ',美元str);},函数(美元参数,美元str){如果(! is_string (美元str)){返回美元str;}返回函数美元str);});var_dump (美元语言- >评估(“小写(“HELLO”)”));
这将打印你好
。这两个编译器和评估者传递一个参数
变量作为第一个参数,等于第二个参数evaluate ()
或编译()
(如“价值观”在评估或“名称”,如果编译)。
使用表达式提供者
2.6
表达提供者在Symfony 2.6中引入的。ob娱乐下载
当你使用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);}));}}
你可以注册供应商使用registerProvider ()或使用构造函数的第二个参数:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;/ /使用构造函数美元语言=新ExpressionLanguage (零,数组(新StringExpressionLanguageProvider (),/ /……));/ /使用registerProvider ()美元语言- >registerProvider (新StringExpressionLanguageProvider ());
提示
建议创建你自己的ExpressionLanguage
类库。现在你可以添加扩展通过重写构造函数:
1 2 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 (美元解析器,美元供应商);}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。