Узлы PHPCR и переопределение метакеша

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

В целях тестирования я изменил функцию 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, что записи метаданных заполняются.

Теперь я хочу переопределить кеш результатов узлов, но я не могу найти способ сделать это. Я не могу найти имя определения службы, которое можно использовать для переопределения. Может ли кто-нибудь указать мне в правильном направлении для этого?


person arvind.d    schedule 26.08.2015    source источник


Ответы (2)


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

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

После этого все метаданные доктрины и кеш результатов узлов заполнялись на моем сервере 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%"
person arvind.d    schedule 28.08.2015

Да, вы, по сути, настраиваете полные имена служб в параметре конфигурации caches.

person Lukas Kahwe Smith    schedule 28.08.2015
comment
Но это не так очевидно, так как в документации caches.meta и caches.nodes указывают на определения doctrine_cache.providers.xxx с параметрами в том же конфигурационном файле. - person arvind.d; 28.08.2015
comment
не уверен, что понимаю.. но если у вас есть идея, как улучшить документы, пожалуйста, пришлите PR - person Lukas Kahwe Smith; 29.08.2015