2016-04-11 18 views
2

Symfony2 ile çalışıyorum ve hizmet tanımını geçersiz kılmaya çalışıyorum.Symfony2 extension, replaceArjument

Uzantı düzeltildi, ancak hizmet tanımı değişmedi. İşte

kodudur:

class AppExtension extends Extension 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 

     $container->setParameter('app.comment.delay_between', $config['comment']['delay_between']); 

     $def = $container->getDefinition('app.comment.manager') 
      ->replaceArgument(0, $config['comment']); 

     $container->setDefinition('app.comment.manager2', $def); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getAlias() { 
     return 'app'; 
    } 
} 

hizmet Definition:

app.comment.manager: 
    class: AppBundle\Comment\CommentManager 
    arguments: 
     - [] 
     - "@doctrine.orm.entity_manager" 

Ve sınıf CommentManager yapıcısı: Ben buna

/** 
* CommandManager constructor. 
* @param array $config 
* @param EntityManagerInterface $em 
*/ 
public function __construct(array $config, EntityManagerInterface $em) { 
    $this->config = $config; 
    var_dump($config); 
    $this->em = $em; 
} 

Ve denetleyicisi:

Gördüğünüz gibi

/home/nathan/Dev/click-tube/src/symfony/src/AppBundle/Comment/CommentManager.php:37: 
array (size=0) 
    empty 
/home/nathan/Dev/click-tube/src/symfony/src/AppBundle/Comment/CommentManager.php:37: 
array (size=1) 
    'delay_between' => int 60 

, ben (wich yapmak istediğim budur) app.commment.manager hizmet tanımını değiştiremez:

Ve bu sonuç almak. Ancak, uzantıların oluşturduğu bir hizmetteki değişiklikleri yansıtabilirim. App.comment.manager'daki değişiklikleri uygulamak için çözüm nedir?

Teşekkür ederiz. replaceArgument çağrı gerçekten argümanları değiştirmek vermedi nerede bu yardım

cevap

1

örnek olarak, parametre uzantısı tanımlanan hizmette enjekte deneyin hizmetimin kurucusuna verilen. met paket uzantısı dosyasında yüklü hizmet tanımını geçersiz kılar

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    - { resource: services.yml } 
    - { resource: "@MyMightyBundle/Resources/config/services.yml" } 

Bu: nedeni benim services.yml zaten böyle benim /app/config/config.yml ithal olmasıydı. Config.yml dosyasındaki service.yml import'u kaldırmak benim problemimi çözdü.

+0

Teşekkür ederim, bunu yapmayı çoktan düşündüm, ancak bu belgede replaceArgument yönteminin neden işe yaramadığını merak ediyorum, dokümana göre mümkün (http://symfony.com/doc/current/ bileşenler/dependency_injection/definitions.html # alma ve ayarlama-hizmet tanımları). – NathanVss

0

Ben aynı sorunu vardı

app.comment.manager: 
    class: AppBundle\Comment\CommentManager 
    arguments: 
     - "%app.comment.delay_between%" 
     - "@doctrine.orm.entity_manager" 

Hope: