我想知道是否有可能在我自己的服务中注入服务的参数,如果是,怎么样?
让我把你放在上下文中。我正在使用FOSFacebookBundle
来加载config.yml
文件中的一些配置。这些配置设置(例如我的脸书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]);
}
我知道可以通过$container
执行以下操作来检索这些参数:
$container->getParameter('fos_facebook.app_id');
但我想知道是否可以将这些参数直接注入我的一个服务定义中。我有一个名为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"
当然,这种语法不起作用,因为Symfony正在寻找一个名为fos_facebook.app_id
的服务,它不存在。
我正在寻找一种避免直接在我的服务中注入容器的解决方案。要么通过我的services.yml
文件中的直接定义,要么通过我的bundle的DI扩展来完成定义我的自定义服务的工作,从FOSFacebookBundle
检索参数并将其注入其中。 / p>
的问候,
马特
答案 0 :(得分: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%"
这么简单:) 希望这会有助于其他人。
的问候,
马特