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

时间:2011-09-02 14:39:56

标签: symfony

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

让我把你放在上下文中。我正在使用FOSFacebookBundle来加载config.yml文件中的一些配置。这些配置设置(例如我的脸书app_idsecretcookie等)保留了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>

的问候,
马特

1 个答案:

答案 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%"

这么简单:) 希望这会有助于其他人。

的问候,
马特