2016-07-25 5 views
1

Ich baue ein Bündel, das von einem anderen Bündel abhängt. Das Mutterbündel lädt eine services.yml-Datei, die einige Parameter definiert:override Parameter von einem ohoher Bündel

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

Ich weiß, die xbundle.doctrine.factory Parameter können von app/config/config.yml geändert werden, aber ich will um den Wert aus meinem benutzerdefinierten untergeordneten Bundle zu ändern. I read the docs, und auch die vorgeschlagenen Stackoverflow-Fragen, aber immer noch nicht herausfinden, wie es zu erreichen ist.

+0

Ich habe kein praktisches Beispiel, aber ich vermute, dass Sie einen Compiler-Pass benötigen: http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html. Versuchen Sie jedoch nicht, die standardmäßige Doktrin-Repository-Factory zu überschreiben, es sei denn, Sie wissen wirklich wirklich, was Sie tun. Mehr als wahrscheinlich können Sie Dozenten für Ereignislisten verwenden. – Cerad

Antwort

0

Sie müssen einen CompilerPass in Ihrem Kind Bundle, schreiben und ändern Sie den Wert:

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

eine Dokumentation here.