2

我正在使用 Symfony CMF、PHPCR 和 SncRedisBundle。我想将 PHPCR 的元数据和节点缓存添加到 SncRedisBundle。

出于测试目的,我修改了文件 Snc\RedisBundle\DependencyInjection\SncRedisExtension.php 中的 loadDoctrine 函数(有关我添加的代码,请参见注释“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 数据库中看到元数据条目被填充。

现在我想覆盖节点结果缓存,但我似乎找不到这样做的方法。我找不到用于覆盖的服务定义名称。谁能指出我正确的方向?

4

2 回答 2

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%"
于 2015-08-28T08:34:16.450 回答
0

是的,您基本上在caches配置选项中配置了完整的服务名称。

于 2015-08-28T08:41:08.127 回答