我想知道是否有可能在我自己的服务中注入服务的参数,如果可以,如何?
让我把你放在上下文中.我正在使用FOSFacebookBundle从config.yml文件加载一些配置.这些配置的设置(如我的facebook app_id,secret,cookie等)保持了由参数FOSFacebookBundle与此代码:
// FOS\FacebookBundle\DependencyInjection\FOSFacebookExtension.php
foreach (array('file', 'app_id', 'secret', 'cookie', 'domain', 'logging', 'culture', 'permissions') as $attribute) {
$containerBuilder->setParameter('fos_facebook.'.$attribute, $config[$attribute]);
}
Run Code Online (Sandbox Code Playgroud)
我知道可以通过以下$container方式检索这些参数:
$container->getParameter('fos_facebook.app_id');
Run Code Online (Sandbox Code Playgroud)
但我想知道是否可以将这些参数直接注入我的服务定义之一.我有一个服务FacebookHelper,需要这些信息.所以我想做一些事情:
acme.helper.facebook:
class: Application\AcmeBundle\Helper\FacebookHelper
arguments:
entityManager: "@doctrine.orm.entity_manager"
facebook: "@fos_facebook.api"
facebookAttributes:
- "@fos_facebook.app_id"
- "@fos_facebook.secret"
- "@fos_facebook.cookie"
Run Code Online (Sandbox Code Playgroud)
当然,这种语法不起作用,因为Symfony正在寻找一个名fos_facebook.app_id不存在的服务.
我正在寻找一种避免直接在我的服务中注入容器的解决方案.通过在我的services.yml文件中进行直接定义,或者通过我的bundle的DI扩展来完成定义我的自定义服务,从中检索参数FOSFacebookBundle并将其注入其中.
问候,
马特
Mat*_*att 10
事实上,在发布我的问题之前,我真的很容易感到惭愧,我没有想到它.我知道如何在config.yml文件中使用参数(例如,通过使用%locale%)但我没有考虑使用此语法在我的服务定义中注入参数.
以下是我FOSFacebookBundle在服务中注入参数的方法:
acme.helper.facebook:
class: Application\AcmeBundle\Helper\FacebookHelper
arguments:
entityManager: "@doctrine.orm.entity_manager"
facebook: "@fos_facebook.api"
facebookAttributes:
appId: "%fos_facebook.app_id%"
secret: "%fos_facebook.secret%"
permissions: "%fos_facebook.permissions%"
Run Code Online (Sandbox Code Playgroud)
这么简单:)希望这会帮助别人.
问候,
马特
| 归档时间: |
|
| 查看次数: |
3943 次 |
| 最近记录: |