2015-08-26 70 views
2

我正在使用Symfony CMF,PHPCR和SncRedisBundle。我想爲PHPCR添加元數據和節點緩存到SncRedisBundle。PHPCR節點和元緩存覆蓋

出於測試目的,我修改了文件Snc \ RedisBundle \ DependencyInjection \ SncRedisExtension.php中的loadDoctrine函數(請參閱我已添加的代碼,1行的註釋「PHPCR元數據定義覆蓋」)。

protected function loadDoctrine(array $config, ContainerBuilder $container) 
{ 
    foreach ($config['doctrine'] as $name => $cache) { 
     $client = new Reference(sprintf('snc_redis.%s_client', $cache['client'])); 
     foreach ($cache['entity_managers'] as $em) { 
      $def = new Definition($container->getParameter('snc_redis.doctrine_cache.class')); 
      $def->setScope(ContainerInterface::SCOPE_CONTAINER); 
      $def->addMethodCall('setRedis', array($client)); 
      if ($cache['namespace']) { 
       $def->addMethodCall('setNamespace', array($cache['namespace'])); 
      } 
      $container->setDefinition(sprintf('doctrine.orm.%s_%s', $em, $name), $def); 
     } 
     foreach ($cache['document_managers'] as $dm) { 
      $def = new Definition($container->getParameter('snc_redis.doctrine_cache.class')); 
      $def->setScope(ContainerInterface::SCOPE_CONTAINER); 
      $def->addMethodCall('setRedis', array($client)); 
      if ($cache['namespace']) { 
       $def->addMethodCall('setNamespace', array($cache['namespace'])); 
      } 
      $container->setDefinition(sprintf('doctrine.odm.mongodb.%s_%s', $dm, $name), $def); 
      //PHPCR metadata definition override 
      $container->setDefinition(sprintf('doctrine_phpcr.odm.%s_%s', $dm, $name), $def); 
     } 
    } 
} 

這適用於覆蓋元數據緩存,我可以在Redis數據庫中看到元數據條目已填充。

現在我想覆蓋節點結果緩存,但我似乎無法找到一種方法來做到這一點。我無法找到用於覆蓋的服務定義名稱。任何人都可以爲我指出正確的方向嗎?

回答

2

我設法通過挖掘容器並查看提供的服務來覆蓋meta和nodes緩存。 Snc \ RedisBundle \ DependencyInjection \ SncRedisExtension.php中的代碼已被恢復,只有config.yml文件必須被修改。

SncRedis覆蓋了Doctrine的緩存提供者,因爲我想使用相同的提供者,所以我只需將doctrine.orm.default_metadata_cache和nodes設置爲doctrine.orm.default_result_cache。

之後,所有doctrine元和節點結果緩存被填充到我的Redis服務器。完整的配置如下:

doctrine_phpcr: 
    session: 
     backend: 
      type: doctrinedbal 
      connection: default 
      caches: 
       meta: doctrine.orm.default_metadata_cache 
       nodes: doctrine.orm.default_result_cache 
     workspace: default 
     username: admin 
     password: admin 
    odm: 
     auto_mapping: true 
     auto_generate_proxy_classes: "%kernel.debug%" 
0

是的,你基本上是配置在caches配置選項的完整服務名稱。

+0

但並不明顯,因爲在文檔中,caches.meta和caches.nodes指向doctrine_cache.providers.xxx定義,其參數在同一配置文件中。 –

+0

不知道我的理解..但如果你有一個想法如何改善文檔,請發送PR –