我想知道是否可以在我自己的服务中注入(inject)服务的参数,如果可以,如何注入(inject)?
让我给你介绍一下背景。我正在使用 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]);
}
我知道可以通过以下操作通过 $container
检索这些参数:
$container->getParameter('fos_facebook.app_id');
但我想知道是否可以将这些参数直接注入(inject)我的服务定义之一。我有一项名为 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
的服务,但该服务不存在。
我正在寻找一种解决方案,以避免将容器直接注入(inject)我的服务中。通过在我的 services.yml
文件中进行直接定义,或者通过我的包的 DI 扩展(这将做一些工作来定义我的自定义服务),从 FOSFacebookBundle
检索参数> 并将它们注入(inject)其中。
问候,
马特
最佳答案
事实上,这真的很简单,我为自己在发布问题之前没有考虑到这一点感到羞愧。我知道如何使用 config.yml 文件中的参数(例如,通过使用 %locale%),但我没有考虑使用此语法在我的服务定义中注入(inject)参数。
以下是我在服务中注入(inject) 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%"
就这么简单:) 希望这对其他人有帮助。
问候,
马特
关于symfony - 在我自己的服务中注入(inject)其他服务的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285096/