我想基于实体列表动态配置我的索引类型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".
我该怎么做?