2016-07-25 68 views
1

我正在构建一个捆绑包,它依赖于另一个捆绑包。父包加载services.yml文件,它定义了一些参数:覆盖anohter包的参数

parameters: 
    xbundle.doctrine.factory: Doctrine\ORM\Repository\DefaultRepositoryFactory 
services: 
    .... 

我知道xbundle.doctrine.factory参数可以从应用程序/配置/ config.yml改变,但我想在我的自定义子包中更改它的值。我read the docs,也是建议的stackoverflow问题,但仍然无法计算如何实现它。

+0

我没有一个方便的例子,但我怀疑你需要一个编译器传递:http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html。但是,除非你真的真的知道你在做什么,否则不要试图覆盖默认的教义库工厂。很可能你可以使用doctrine事件监听器。 – Cerad

回答

0

你必须写在你的孩子包一个CompilerPass,并更改值:

// src/Acme/DemoBundle/DependencyInjection/Compiler/OverrideServiceCompilerPass.php 
namespace Acme\DemoBundle\DependencyInjection\Compiler; 

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 

class OverrideServiceCompilerPass implements CompilerPassInterface 
{ 
    public function process(ContainerBuilder $container) 
    { 
     $container->setParameter('xbundle.doctrine.factory', '..New Value ...'); 
    } 
} 

有些文档here