2015-08-26 6 views
2

Я использую Symfony CMF, PHPCR и SncRedisBundle. Я хочу добавить кеширование метаданных и узлов для PHPCR в SncRedisBundle.Ограничения PHPCR и мета-кеширование

В целях тестирования я изменил функцию loadDoctrine в файле Snc \ RedisBundle \ DependencyInjection \ SncRedisExtension.php (см. Комментарий «переопределение метаданных PHPCR» для кода, который я добавил, 1 строка).

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

Мне удалось переопределить кеш мета и узлов, врываясь в контейнер и глядя на предоставленные службы. Код в Snc \ RedisBundle \ DependencyInjection \ SncRedisExtension.php был отменен, и только файл config.yml должен был быть изменен.

SncRedis переопределяет провайдера кэша доктрины, и поскольку я хотел использовать одного и того же провайдера, мне нужно было установить meta для doctrine.orm.default_metadata_cache и узлов в doctrine.orm.default_result_cache.

После этого на мой сервер Redis был заполнен весь кэш результатов meta и nodes доктрины. Полная конфигурация ниже:

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

Но это не так очевидно, так как в документации cache.meta и caches.nodes указывают на определения doctrine_cache.providers.xxx с параметрами в том же файле конфигурации. –

+0

не уверен, что я понимаю .. но если у вас есть идея, как улучшить документы, пожалуйста, отправьте PR –