我的团队开发了一个非常大的电子商务项目。到目前为止,我们在该捆绑包中有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%
(...)
当然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的人配置 - 所以她必须能够打开我们的bundle配置文件并调整参数,然后在我们使用的一些Symfony包中使用它们。所以我希望所有应用程序配置都可以在我们的bundle的语义配置中访问,因为我不希望将整个配置公开给那个人(我已经将所有配置分成了单独的配置文件,其中一个它们包含我们捆绑的配置,其余的 - 包括所有其他的配置。)
那么,我甚至可能会问这个问题吗?
答案 0 :(得分:0)
由于要在每个安装中修改参数(它们可能至少在开发和生产环境之间有所不同),因此(如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 中):
parameters:
(...)
company_bundle_email_user: user@domain.com
company_bundle_email_pass: @MyBeAUtiFULpA55w0Rd!
并使用它们(在 config.yml 中):
swiftmailer:
(...)
username: %company_bundle_email_user%
password: %company_bundle_email_pass%