如何基于复杂表达式注入值
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.0,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
如何基于复杂表达式注入值
服务容器还支持“表达式”,允许您将非常特定的值注入到服务中。
例如,假设您有第三个被调用的服务(这里没有显示)mailer_configuration
,它有一个getMailerMethod ()
方法,该方法将返回一个字符串sendmail
基于一些配置。的第一个参数my_mailer
Service是简单字符串sendmail
:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / services.yml服务:app.mailer:类:AppBundle \梅勒参数:(发送邮件)
12 3 4 5 6 7 8 9 10 11 12 13
<!——app/config/services.xml——> .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 6 7
/ / app / config / services.php使用欧宝娱乐app下载地址\组件\DependencyInjection\定义;$容器->setDefinition (“app.mailer”,新定义(“AppBundle \梅勒”,数组(“发送邮件”)));
但是我们不用硬编码,我们怎么从getMailerMethod ()
关于新事物mailer_configuration
服务吗?一种方法是使用一个表达:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / config.yml服务:my_mailer:类:AppBundle \梅勒参数:[" @ =服务(mailer_configuration) .getMailerMethod ()”)
12 3 4 5 6 7 8 9 10 11 12 13 14
<!——app/config/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 7 8
/ / app / config / config . php使用欧宝娱乐app下载地址\组件\DependencyInjection\定义;使用欧宝娱乐app下载地址\组件\ExpressionLanguage\表达式;$容器->setDefinition (“my_mailer”,新定义(“AppBundle \梅勒”,数组(新表达式(的服务(“mailer_configuration”).getMailerMethod()”))));
有关表达式语言语法的详细信息,请参见表达式语法.
在这种情况下,您可以访问2个函数:
-
服务
- 返回一个给定的服务(参见上面的例子)。
-
参数
-
返回一个特定的参数值(语法就像
服务
).
您还可以访问ContainerBuilder通过一个容器
变量。下面是另一个例子:
- YAML
- XML
- PHP
1 2 3 4
服务:my_mailer:类:AppBundle \梅勒参数:[" @ = container.hasParameter(“some_param”)?参数(“some_param”):“default_value””)
12 3 4 5 6 7 8 9 10 11 12 13
<??> . 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 8 9
使用欧宝娱乐app下载地址\组件\DependencyInjection\定义;使用欧宝娱乐app下载地址\组件\ExpressionLanguage\表达式;$容器->setDefinition (“my_mailer”,新定义(“AppBundle \梅勒”,数组(新表达式(“container.hasParameter(“some_param”)?参数('some_param'): 'default_value'"))));
表达式可以用在参数
,属性
,作为与配置器
作为论证调用
(方法调用)。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。