Symfony 覆盖另一个包的参数

Symfony 覆盖另一个包的参数,symfony,Symfony,我正在构建一个包,它依赖于另一个包。父捆绑包加载services.yml文件,该文件定义了一些参数: parameters: xbundle.doctrine.factory: Doctrine\ORM\Repository\DefaultRepositoryFactory services: .... 我知道xbundle.doctrine.factory参数可以从app/config/config.yml更改,但我想从自定义子包中更改其值。I,以及建议的stackoverf

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

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

我知道xbundle.doctrine.factory参数可以从app/config/config.yml更改,但我想从自定义子包中更改其值。I,以及建议的stackoverflow问题,但仍然无法确定如何实现它。

您必须在子捆绑包中编写编译器类,并更改值:

// 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 ...');
    }
}

一些文档。

我手头没有示例,但我怀疑您需要一个编译器密码:。但是,除非您真的知道自己在做什么,否则不要试图覆盖默认的条令存储库工厂。很可能您可以使用条令事件侦听器。