Symfony不尊重测试环境的覆盖类参数

时间:2016-07-05 06:11:10

标签: symfony

我有一个services.yml的捆绑包,其中服务定义使用class参数的同一文件中包含的参数,如下所示:

parameters:
    application.servicename.class: Application\Service\ServiceName

services:
    application.servicename:
        class: %application.servicename.class%

现在我想覆盖测试环境的服务类。但是,覆盖config_test.yml中的参数不会导致覆盖类的对象被实例化。

将以下内容添加到config_test.yml

parameters:
    application.servicename.class: Application\Mock\Service\ServiceName

...仍然会导致服务从Application\Service\ServiceName即时发布。如果我尝试将application.servicename.class作为参数传递给服务并将其转储到构造函数中,则会显示覆盖值Application\Mock\Service\ServiceName

为什么Symfony在准备服务时不尊重服务类的重写值?

3 个答案:

答案 0 :(得分:2)

你应该移动

parameters:
application.servicename.class: Application\Service\ServiceName

从services.yml到config.yml因为在我的意见中,你将使用services.yml中的值覆盖config_test.yml中的paremeter的值

答案 1 :(得分:0)

我认为您正在寻找的是Bundle中的Extension类:

http://symfony.com/doc/current/cookbook/bundles/extension.html

我认为您可以更改加载配置文件的优先级 这是一个实现的例子

public function load(array $configs, ContainerBuilder $container {

    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);
    $container->setParameter('your.config.parameter', $config['your']['config']['parameter']);

    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
    $loader->load('services.yml');

}

答案 2 :(得分:0)

事实证明,这个问题与Symfony加载配置无关,而是假设加载了错误的类。这个假设是由于原始服务(以及扩展它的模拟)的方法调用被标记为私有这一事实引起的。

如果这不成问题,我相信我试图做的事情应该是可能的,参考http://symfony.com/doc/2.8/cookbook/bundles/override.html#services-configuration

抱歉浪费你的时间。