Symfony2捆绑包配置参数

Symfony2捆绑包配置参数,symfony,configuration,dependency-injection,Symfony,Configuration,Dependency Injection,我的团队开发了一个非常大的电子商务项目。到目前为止,我们在这个包中有大约40个配置参数,我不知道它们的最终关系,也没有办法正确地构造它们,所以我们最终使用了app/config.yml文件中的标准参数结构但是,我决定将配置移到语义配置结构,这样我就可以验证它,拥有一个干净的结构,通过bundle继承等方式轻松地扩展它 问题是我现在无法将我们的捆绑包参数导入到另一个捆绑包配置中 以下是我以前可以做的: (...) parameters: company.bundle.email.user:

我的团队开发了一个非常大的电子商务项目。到目前为止,我们在这个包中有大约40个配置参数,我不知道它们的最终关系,也没有办法正确地构造它们,所以我们最终使用了
app/config.yml
文件中的标准参数结构但是,我决定将配置移到语义配置结构,这样我就可以验证它,拥有一个干净的结构,通过bundle继承等方式轻松地扩展它

问题是我现在无法将我们的捆绑包参数导入到另一个捆绑包配置中

以下是我以前可以做的:

(...)
parameters:
    company.bundle.email.user: user@domain.com
    company.bundle.email.pass: @MyBeAUtiFULpA55w0Rd!
(...)

swiftmailer:
    (...)
    username: %company.bundle.email.user%
    password: %company.bundle.email.pass%
(...)
company_bundle:
    (...)
    settings:
        (...)
        mailer:
            (...)
            user: user@domain.com
            pass: @MyBeAUtiFULpA55w0Rd!
 (...)

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

 (...)
以下是我现在尝试做的事情,但根本不起作用:

(...)
parameters:
    company.bundle.email.user: user@domain.com
    company.bundle.email.pass: @MyBeAUtiFULpA55w0Rd!
(...)

swiftmailer:
    (...)
    username: %company.bundle.email.user%
    password: %company.bundle.email.pass%
(...)
company_bundle:
    (...)
    settings:
        (...)
        mailer:
            (...)
            user: user@domain.com
            pass: @MyBeAUtiFULpA55w0Rd!
 (...)

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

 (...)
当然,
company\u bundle
节点包含由DIC处理并在
company\bundle\DependencyInjection\configuration.php
中定义的语义配置

现在,我只得到以下错误:

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]                       
You have requested a non-existent parameter "company_bundle.settings.mailer.user".
所以问题是:如何在另一个bundle配置参数中访问我的bundle参数(我已经注意到在Swiftmailer bundle之前始终包含我的bundle配置)

注意:此处显示的Swiftmailer捆绑包配置仅用于演示目的,我希望能够跨其他捆绑包重用我的捆绑包参数

这背后的动机是什么?

我希望我们的产品由一个不太了解Symfony的人来配置,所以她必须能够打开我们的bundle配置文件并调整参数,然后在我们使用的一些Symfony bundle中使用这些参数。因此,我希望所有应用程序配置都可以在捆绑包的语义配置中访问,因为我不想将整个配置公开给那个人(我已经将所有配置都划分为单独的配置文件,其中一个包含捆绑包的配置,其余的则包含所有其他配置)


那么,我所问的可能吗?

由于参数在每次安装中都要修改(它们可能至少在开发和生产环境中有所不同),所以(正如Sgoettschkes在评论中所说)外部文件是最好的解决方案

在Symfony2中,这些参数的默认位置是app/config/dir中的parameters.yml文件

例如,在标准安装中,您可以找到以下条目:

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    (...)
这些参数在config.yml中的使用方式如下:

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        (...)
因此,您可以定义参数(在parameters.yml中):

并使用它们(在config.yml中):


捆绑包不能共享配置值。如果需要,则需要修改配置的工作方式。我建议的方法是,在那里有一个带有
参数的文件,然后在您需要的“真实”配置文件中使用这些值。