【发布时间】:2012-12-23 12:59:25
【问题描述】:
我的团队开发了一个非常大的电子商务项目。到目前为止,我们在那个包中有大约 40 个配置参数,我不知道它们的最终关系,也没有办法正确地构造它们,所以我们最终使用了 app/config.yml 文件中的标准参数结构。 但是,在此过程中,我决定将配置移至语义配置结构——这样我就可以验证它,拥有一个干净的结构,通过捆绑继承等方式轻松扩展它。
问题是我现在无法将我们的包参数导入另一个包配置。
这是我之前可以做的:
(...)
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 的人来配置 - 所以她必须能够打开我们的包配置文件并调整参数,然后这些参数将用于我们使用的一些 Symfony 包.所以我希望 all 应用程序配置可以在我们的包的语义配置中访问,因为我不想将整个配置暴露给那个人(我已经将所有内容分成单独的配置文件,其中之一它们包含我们包的配置,其余的 - 用于所有其他的)。
那么,我要问的可能吗?
【问题讨论】:
-
捆绑包不能共享配置值。如果你想要这个,你需要修改配置的工作方式。我建议的方法是在其中有一个带有
parameters的文件,然后在需要它们的“真实”配置文件中使用这些值。
标签: symfony configuration dependency-injection