Symfony2捆绑包配置参数
我的团队开发了一个非常大的电子商务项目。到目前为止,我们在这个包中有大约40个配置参数,我不知道它们的最终关系,也没有办法正确地构造它们,所以我们最终使用了Symfony2捆绑包配置参数,symfony,configuration,dependency-injection,Symfony,Configuration,Dependency Injection,我的团队开发了一个非常大的电子商务项目。到目前为止,我们在这个包中有大约40个配置参数,我不知道它们的最终关系,也没有办法正确地构造它们,所以我们最终使用了app/config.yml文件中的标准参数结构但是,我决定将配置移到语义配置结构,这样我就可以验证它,拥有一个干净的结构,通过bundle继承等方式轻松地扩展它 问题是我现在无法将我们的捆绑包参数导入到另一个捆绑包配置中 以下是我以前可以做的: (...) parameters: company.bundle.email.user:
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中):
捆绑包不能共享配置值。如果需要,则需要修改配置的工作方式。我建议的方法是,在那里有一个带有
参数的文件,然后在您需要的“真实”配置文件中使用这些值。