我正在使用 ZF2 和 Doctrine 的 ODM 模块。
问题:
在每次请求时,我的代理和水合器都会被重新生成。这会导致随机错误。有关详细信息,请参阅https://github.com/doctrine/mongodb-odm/issues/484 。
在 Doctrine 关于 MetadataCaching 的文档之后http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/metadata-drivers.html
我清楚地将 ApcCache 设置为默认的元数据缓存实现。
调试我的文档管理器我得到以下信息:
[mongoCmd] => $
[retryConnect] => 0
[retryQuery] => 0
[autoGenerateProxyClasses] => 0
[proxyDir] => data/DoctrineMongoODMModule/Proxy
[proxyNamespace] => DoctrineMongoODMModule\Proxy
[autoGenerateHydratorClasses] => 0
[hydratorDir] => data/DoctrineMongoODMModule/Hydrator
[hydratorNamespace] => DoctrineMongoODMModule\Hydrator
[defaultDB] =>
[metadataCacheImpl] => Doctrine\Common\Cache\ApcCache Object
所以自动生成代理和自动生成水合器都关闭了,ApcCache 对象被明确设置为 metadataCacheImplementation,但是 Doctrine 不是从缓存的类中读取元数据,而是在每个后续请求中重新生成类。
关于如何强制 Doctrine 从缓存中读取元数据而不是在每个请求上创建新类的任何想法。
谢谢。
马尔科