2012-12-23 63 views
2

我的團隊開發了一個非常大的電子商務項目。到目前爲止,我們在該包中有40個配置參數,我不知道它們的最終關係,也沒有辦法正確構建它們,所以我們最終使用了app/config.yml文件中的標準參數結構。 但是,在我決定將配置移動到語義配置結構的某個地方 - 所以我可以驗證它,有一個乾淨的結構,可以通過bundle繼承等方式輕鬆擴展它。Symfony2軟件包配置參數

問題是我現在無法將我們的bundle參數導入到另一個bundle config。

這是我能做什麼之前:

(...) 
parameters: 
    company.bundle.email.user: [email protected] 
    company.bundle.email.pass: @MyBeAUtiFULpA55w0Rd! 
(...) 

swiftmailer: 
    (...) 
    username: %company.bundle.email.user% 
    password: %company.bundle.email.pass% 

這裏就是我想現在要做的,並沒有在所有的工作:

(...) 
company_bundle: 
    (...) 
    settings: 
     (...) 
     mailer: 
      (...) 
      user: [email protected] 
      pass: @MyBeAUtiFULpA55w0Rd! 
(...) 

swiftmailer: 
    (...) 
    username: %company_bundle.settings.mailer.user% 
    password: %company_bundle.settings.mailer.pass% 

(...) 

當然的了company_bundle節點包含語義配置,由DIC處理並在Company\Bundle\DependencyInjection\Configuration.php中定義。

所有我結束了,現在是以下錯誤:

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]      
You have requested a non-existent parameter "company_bundle.settings.mailer.user". 

因此問題是:如何讓我的包參數另一束配置參數訪問(我已經照顧,包括我的捆綁配置總是在Swiftmailer捆綁之前)?

注意:此處僅顯示Swiftmailer軟件包配置用於演示目的,我希望能夠在其他軟件包中重用我的軟件包參數。

背後的動機是什麼?

嗯,我希望我們的產品可以由一個不熟悉Symfony的人來配置 - 所以她必須能夠打開我們的包配置文件,然後調整參數,然後在一些Symfony包中使用它我們用。所以我想所有的應用程序配置都可以在我們的bundle的語義conf中訪問,因爲我不想把整個配置公開給那個人(我已經把所有的東西都分成了單獨的配置文件,其中一個包含配置我們的捆綁包,其他 - 所有其他的)。

那麼,我問的是甚至可能嗎?

+0

軟件包不能共享配置值。如果你想這樣做,你需要修改配置的工作方式。我建議的方式是在那裏有一個帶'parameters'的單個文件,然後在你需要它們的「真實」配置文件中使用這些值。 – Sgoettschkes

回答

0

由於參數要在每次安裝時修改(它們可能至少在開發環境和生產環境之間有所不同),所以(如Sgoettschkes在評論中所說)外部文件是最佳解決方案。

在Symfony2默認情況下,這些參數的位置是parameters.yml位於app/config/dir中的文件。

在標準安裝,你可以找到例如這樣的條目:

parameters: 
    database_driver: pdo_mysql 
    database_host: 127.0.0.1 
    (...) 

這些PARAMS在配置使用。陽明這樣說:

doctrine: 
    dbal: 
     driver: "%database_driver%" 
     host:  "%database_host%" 
     (...) 

所以,你可以定義你PARAMS(在parameters.yml):

parameters: 
    (...) 
    company_bundle_email_user: [email protected] 
    company_bundle_email_pass: @MyBeAUtiFULpA55w0Rd! 

,並用它們(在config.yml):

swiftmailer: 
    (...) 
    username: %company_bundle_email_user% 
    password: %company_bundle_email_pass% 
相關問題