如何根据其他服务配置bundle?

时间:2015-03-24 10:15:51

标签: symfony elastica

我想基于实体列表动态配置我的索引类型Elastica,我可以从实体库获取。要做到这一点,我必须有存储库的实例,所以doctrine EntityManager必须存在,所以Depedency Inject容器必须通过编译。但是编译Elastica时为时已晚,因为容器被冻结了。

这是我试过的:

#config.yml

fos_elastica:
    clients:
        default: { host: 127.0.0.1, port: 9200 }
    indexes:
        app:
            types: %elastic_types%

#application bundle

public function build(ContainerBuilder $container){
    $types = array(
        'tag' => array(            
            'mappings' => array(
                'text' => array()
            ),
            'persistence' => array(
                'driver' => 'orm',
                'model' =>  'Cloud\AdmBundle\Entity\Tag',
                'provider' => array(),
                'listener' => array(),
                'finder' => array()
            )
        )
    );

    $container->setParameter('elastic_types', $types);
}

它可以工作但我没有能力在这里使用EntityRepository。

#application bundle

public function setContainer(ContainerInterface $container = null) {
    parent::setContainer($container);
    $container->setParameter('elastic_types', array('anything param'));
}

设置任何params为时已晚,因为容器已编译并且我得到了execption:

ParameterNotFoundException in ParameterBag.php line 106:
You have requested a non-existent parameter "elastic_types".

我该怎么做?

0 个答案:

没有答案