2016-07-05 27 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

對不起,浪費你的時間。