如何在Doctrine2/ZF2中使用Memcached?

Ais*_*ina 3 php doctrine-orm zend-framework2

我已经设置了本文中概述的代码/目录/配置:http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/

所以我的配置文件看起来像:

<?php
namespace Game;

return array(

    // <snip>

    // Doctrine config
    'doctrine' => array(
        'driver' => array(
            __NAMESPACE__ . '_driver' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
            ),
            'orm_default' => array(
                'drivers' => array(
                    __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
                )
            )
        )
    ),
);
Run Code Online (Sandbox Code Playgroud)

现在,我需要设置/更改以使Doctrine使用Memcached作为其缓存后端?我在谷歌上搜索了很多,但除了这个问题,它说它让它工作(但不是如何),我一直无法找到任何东西.

Oma*_* S. 8

他们张贴了官方的方式来支持它在这里


M.R*_*mit 6

忘记以前的答案.在花费数小时跟踪错误后,我发现doctrine查找"doctrine.cache.instance"值,应该有一个引用您在服务管理器中设置的服务的字符串.

但是,由于教条代码库中的错误,从不检索配置.我稍后会将此提交给github.

但好消息是,当没有给出"doctrine.cache.instance"时,使用了别名"my_memcached_alias".

所以上面的代码可以很容易地修复,并从教条源中删除尴尬的黑客.

(注意:我保留了doctrine.cache配置以便将来兼容并显示设置实例别名的正确方法)

module.config.php

    'doctrine' => array(
            'driver' => array(
                __NAMESPACE__ . '_driver' => array(
                    'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                    'cache' => 'memcached',
                    'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'),
                ),
                'orm_default' => array(
                    'drivers' => array(
                        __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver',
                    ),
                ),
            ),
            'cache' => array(
                'instance' => 'my_memcached_alias',
            ),
        ),

    'service_manager' => array(
            'factories' => array(
                'my_memcached_alias' => function() {
                    $memcached = new \Memcached();
                    $memcached->addServer('localhost', 11211);
                    return $memcached;
                },
            ),
         ),
Run Code Online (Sandbox Code Playgroud)

我希望你现在已经找到了一个解决方案,它不涉及框架修改,但是对于那些仍在寻找答案的人来说,这肯定会有所帮助

编辑:经过多次头痛我发现配置应该是doctrine.cache.memcache.instance

第二次编辑:

这是正确的代码

'cache' => array(
        'memcache' => array(
            'instance' => 'memcacheService',
        ),
    ),
Run Code Online (Sandbox Code Playgroud)