如何覆盖每个环境的Symfony2语义配置?

时间:2013-03-17 12:36:54

标签: symfony

parameters.yml:

time_limit:        8

my_ui.yml:

my_ui:
    time_limit: %time_limit%

config.yml:

imports:
    - { resource: my_ui.yml }

然后,我可以通过我的捆绑包中的Extension和Configuration类在我的控制器中访问它。

我现在如何覆盖测试环境中的time_limit

我已尝试在my_ui_test.yml文件中加载另一个config_test.yml,但无济于事。

3 个答案:

答案 0 :(得分:4)

想出来:每个主机必须有一个参数文件。但是我需要在一台主机上每个env使用不同的参数。

parameters.yml:

parameters:
    time_limit: 8

my_ui.yml:

my_ui:
    time_limit: %time_limit%

config.yml:

imports:
    - { resource: my_ui.yml }

这会在8 env。

中为我dev

然后,参数_test.yml:

parameters:
    time_limit: 0

config_test.yml:

imports:
    - { resource: parameters_test.yml }

这会在0 env。

中为我test

答案 1 :(得分:1)

覆盖config_test.yml文件中的任何参数,并确保在执行功能测试时向app_test.php控制器发出请求。如果该控制器不存在,请从app_dev.php更改

复制它
$kernel = new AppKernel('dev', true);

$kernel = new AppKernel('test', true);

例如,我使用bcrypt密码编码器,每次都会在1-2秒内对密码进行编码。这对于测试是不可接受的,因此我将成本覆盖到config_test.yml中的最小值以加速测试:

security:
    encoders:
        Elnur\Model\User:
            algorithm: bcrypt
            cost: 4

这种生产方式的费用为14,但仅在4进行测试。

答案 2 :(得分:0)

我发现最好的方法是建立自己的功能测试环境进行测试。这与您的产品/开发环境完全分开。

你可以在Johann Schmidts的丛书中学习这种方法的很好的例子。我复制并修改了JMSPaymentCoreBundle中的项目。

另一种方法是在config_test.yml文件中包含(并覆盖prod和dev设置)。该文件只应由测试客户端加载。