2016-07-05 78 views
0

我与这里的服务定义使用包含在同一个文件内的参数为class参数,像这样一个services.yml捆绑:Symfony的不尊重覆盖类参数测试环境

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被instantieted。如果我尝试将application.servicename.class作为参数传递给服务并将其转储到构造函数中,则会显示覆盖值Application\Mock\Service\ServiceName

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

回答

0

我认为你在寻找什么是你包一个扩展类:

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

你应该将

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

从services.yml到config.yml因为在我的opninion中,您正在使用services.yml中的值覆盖config_test.yml中的参数值。

0

事实证明,此问题与Symfony加载配置,而是假设加载了不正确的类。这个假设是由于原始服务(和扩展它的模拟)的方法调用被标记为私有的事实造成的。

有了这不是一个问题,我相信什么,我试图做的应该是可能的,裁判http://symfony.com/doc/2.8/cookbook/bundles/override.html#services-configuration

对不起,浪费你的时间。