2011-09-02 65 views
3

我想知道是否可以在我自己的服務中注入服務的參數,如果是,如何?在我自己的服務中注入其他服務的參數

讓我把你放在上下文中。我正在使用從config.yml文件加載一些配置的FOSFacebookBundle。這些配置設置(如我的facebook 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文件中直接定義,要麼通過我的軟件包的DI擴展來定義自定義服務,請從FOSFacebookBundle中檢索參數並將它們注入到其中。

問候,
馬特

回答

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

這麼簡單:) 希望這會幫助別人。

Regards,
Matt