2

我的团队开发了一个非常大的电子商务项目。到目前为止,我们在那个包中有大约 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 包。所以我希望所有应用程序配置都可以在我们的包的语义配置中访问,因为我不想将整个配置暴露给那个人(我已经将所有内容分成单独的配置文件,其中一个包含我们的包的配置,其余的 - 对于所有其他的)。

那么,我要问的可能吗?

4

1 回答 1

0

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

在 Symfony2 中,这些参数的默认位置是位于 app/config/ 目录中的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%
于 2014-12-30T12:20:33.350 回答