如何让服务参数/引用可选
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何让服务参数/引用可选
有时候,你的一个服务可能有一个可选的依赖性,这意味着不需要依赖您的服务正常工作。在上面的示例中,app.mailer
服务必须存在,否则就会抛出一个异常。通过修改app.欧宝app在哪里找newsletter_manager
服务定义,你可以参考可选的,这样做有两种策略。
设置缺失的依赖关系为null
您可以使用零
策略来显式地设置的参数零
如果服务不存在:
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< !- - - - - -- - - - - -app/config/services.xml -->< /span>< ?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”>< !- - - - - -- - - - - -。。。- - >< /服务><服务id=“app.欧宝app在哪里找newsletter_manager”类=“AppBundle 欧宝app在哪里找\通讯\ NewsletterManager”><论点类型=“服务”id=“app.mailer”on-invalid=“零”/ >< /服务>< /服务>< /容器>
1 2 3 4 5 6 7 8 9 10 11 12
/ / app / config / services.php使用AppBundle\欧宝app在哪里找通讯\欧宝app在哪里找NewsletterManager;使用欧宝娱乐app下载地址\组件\DependencyInjection\参考;使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerInterface;美元容器- >注册(“app.mailer”,……);美元容器- >注册(“app.欧宝app在哪里找newsletter_manager”,N欧宝app在哪里找ewsletterManager::类)- >addArgument (新引用(“app.mailer”,ContainerInterface::NULL_ON_INVALID_REFERENCE));
请注意
目前不支持“零”战略的YAML的司机。
忽略缺失的依赖关系
忽略缺失的依赖关系的行为是一样的“零”的行为除了在方法调用中使用时,在这种情况下,方法调用本身将被删除。
在接下来的例子中容器将注入服务使用一个方法调用如果服务和删除方法调用,如果它不存在:
- YAML
- XML
- PHP
1 2 3 4 5 6
# app / config / services.yml服务:app.欧宝app在哪里找newsletter_manager:类:AppBundle 欧宝app在哪里找\通讯\ NewsletterManager电话:- - - - - -[setMailer,(' @ ? app.mailer '])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
< !- - - - - -- - - - - -app/config/services.xml -->< /span>< ?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”>< !- - - - - -- - - - - -。。。- - >< /服务><服务id=“app.欧宝app在哪里找newsletter_manager”类=“AppBundle 欧宝app在哪里找\通讯\ NewsletterManager”><调用方法=“setMailer”><论点类型=“服务”id=“app.mailer”on-invalid=“忽略”/ >< /调用>< /服务>< /服务>< /容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / app / config / services.php使用AppBundle\欧宝app在哪里找通讯\欧宝app在哪里找NewsletterManager;使用欧宝娱乐app下载地址\组件\DependencyInjection\参考;使用欧宝娱乐app下载地址\组件\DependencyInjection\ContainerInterface;美元容器- >注册(“app.mailer”,……);美元容器- >注册(“app.欧宝app在哪里找newsletter_manager”,N欧宝app在哪里找ewsletterManager::类)- >addMethodCall (“setMailer”,数组(新引用(“app.mailer”,ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
YAML的特别@吗?
语法告诉服务容器的依赖是可选的。当然,欧宝app在哪里找NewsletterManager
也必须被添加一个重写setMailer ()
方法:
1 2 3 4
公共函数setMailer(梅勒美元梅勒){/ /……}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。