That’s the way how to use Zend Cache with Doctrine in Zend Framework 3.
First do all doctrine settings and define a cache in your global.php:
'doctrine' => [
'connection' => [
// default connection name
'orm_default' => [
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => [
'host' => 'localhost',
'port' => 3306,
'user' => 'xxx',
'password' => 'xxx',
'dbname' => 'xxx',
'charset' => 'utf8'
]
]
],
'configuration' => [
'orm_default' => [
'metadata_cache' => 'zend.dbcache',
'query_cache' => 'zend.dbcache',
'result_cache' => 'zend.dbcache',
]
],
],
'caches' => [
'zend.dbcache' => [
'adapter' => [
'name' => 'filesystem',
'options' => [
'dirLevel' => 2,
'cacheDir' => './data/cache/db',
'dirPermission' => 0775,
'filePermission' => 0666,
'namespaceSeparator' => '-',
'keyPattern' => '/^[\[\]\$\\a-z0-9_\+\-]*$/Di',
],
],
'plugins' => [
'exception_handler' => [
'throw_exceptions' => false
],
'serializer'
]
],
],
Then define a service ‘doctrine.cache.zend.dbcache‘ in your module/Application/src/Module.php:
/**
* Expected to return \Zend\ServiceManager\Config object or array to
* seed such an object.
*
* @return array|\Zend\ServiceManager\Config
*/
public function getServiceConfig()
{
return [
'factories' => [
'doctrine.cache.zend.dbcache' => function(ServiceManager $serviceManager) {
return new \DoctrineModule\Cache\ZendStorageCache($serviceManager->get('zend.dbcache'));
}
],
];
}