如何注入值基于复杂表达式
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何注入值基于复杂表达式
服务容器还支持一个“表达式”,允许您为服务注入非常特定的值。
例如,假设您有一个第三服务(这里没有显示),调用mailer_configuration
,它有一个getMailerMethod ()
方法,它将返回一个字符串sendmail
基于一些配置。记住的第一个参数my_mailer
服务是一个简单的字符串sendmail
:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / services.yml服务:app.mailer:类:AppBundle \梅勒参数:(发送邮件)
1 2 3 4 5 6 7 8 9 10 11 12 13
< !——app / config /服务。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“app.mailer”类=“AppBundle \梅勒”><论点>sendmail< /论点>< /服务>< /服务>< /容器>
1 2 3 4 5
/ / app / config / services.php使用AppBundle\梅勒;美元容器- >注册(“app.mailer”,梅勒::类)- >addArgument (“发送邮件”);
而不是硬编码,我们如何得到这个值的getMailerMethod ()
的新mailer_configuration
服务吗?一种方法是使用一个表达式:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / services.yml服务:my_mailer:类:AppBundle \梅勒参数:[" @ =服务(mailer_configuration) .getMailerMethod ())
1 2 3 4 5 6 7 8 9 10 11 12 13
< !——app / config /服务。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“my_mailer”类=“AppBundle \梅勒”><论点类型=“表情”>服务(mailer_configuration) .getMailerMethod ()< /论点>< /服务>< /服务>< /容器>
1 2 3 4 5 6
/ / app / config / services.php使用AppBundle\梅勒;使用欧宝娱乐app下载地址\组件\ExpressionLanguage\表达式;美元容器- >注册(“my_mailer”,梅勒::类)- >addArgument (新表达式(的服务(“mailer_configuration”) .getMailerMethod ()”));
了解更多关于表达式语言语法,看表达式语法。
在这种情况下,你可以访问2功能:
-
服务
- 返回给定服务(见上面的示例)。
-
参数
-
返回一个特定的参数值(语法就像
服务
)。
你也可以访问容器通过一个容器
变量。这是另一个例子:
- YAML
- XML
- PHP
1 2 3 4
服务:my_mailer:类:AppBundle \梅勒参数:[" @ = container.hasParameter (“some_param”)吗?参数(“some_param”):“default_value””)
1 2 3 4 5 6 7 8 9 10 11 12
< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“my_mailer”类=“AppBundle \梅勒”><论点类型=“表情”>container.hasParameter (“some_param”) ?参数(some_param):“default_value”< /论点>< /服务>< /服务>< /容器>
1 2 3 4 5 6 7
使用AppBundle\梅勒;使用欧宝娱乐app下载地址\组件\ExpressionLanguage\表达式;美元容器- >注册(“my_mailer”,梅勒::类)- >addArgument (新表达式(“container.hasParameter (“some_param”) ?参数(some_param): default_value”));
表达式可用于参数
,属性
作为参数,配置器
并作为参数调用
(方法调用)。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。