在我自己的服务中注入其他服务的参数

Mat*_*att 3 symfony

我想知道是否有可能在我自己的服务中注入服务的参数,如果可以,如何?

让我把你放在上下文中.我正在使用FOSFacebookBundleconfig.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)

这么简单:)希望这会帮助别人.

问候,
马特