added cache service definition
This commit is contained in:
parent
5e0a6a44df
commit
a2b3d3cf00
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Bridge\Doctrine\DependencyInjection;
|
namespace Symfony\Bridge\Doctrine\DependencyInjection;
|
||||||
|
|
||||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||||
|
use Symfony\Component\DependencyInjection\Alias;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Definition;
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
@ -285,6 +286,68 @@ abstract class AbstractDoctrineExtension extends Extension
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a configured object manager metadata, query or result cache driver.
|
||||||
|
*
|
||||||
|
* @param array $objectManager A configured object manager.
|
||||||
|
* @param ContainerBuilder $container A ContainerBuilder instance.
|
||||||
|
* @param string $cacheName
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException In case of unknown driver type.
|
||||||
|
*/
|
||||||
|
protected function loadObjectManagerCacheDriver(array $objectManager, ContainerBuilder $container, $cacheName)
|
||||||
|
{
|
||||||
|
$cacheDriver = $objectManager[$cacheName.'_driver'];
|
||||||
|
$cacheDriverService = $this->getObjectManagerElementName($objectManager['name'] . '_' . $cacheName);
|
||||||
|
|
||||||
|
switch ($cacheDriver['type']) {
|
||||||
|
case 'service':
|
||||||
|
$container->setAlias($cacheDriverService, new Alias($cacheDriver['id'], false));
|
||||||
|
|
||||||
|
return;
|
||||||
|
case 'memcache':
|
||||||
|
$memcacheClass = !empty($cacheDriver['class']) ? $cacheDriver['class'] : '%'.$this->getObjectManagerElementName('cache.memcache.class').'%';
|
||||||
|
$memcacheInstanceClass = !empty($cacheDriver['instance_class']) ? $cacheDriver['instance_class'] : '%'.$this->getObjectManagerElementName('cache.memcache_instance.class').'%';
|
||||||
|
$memcacheHost = !empty($cacheDriver['host']) ? $cacheDriver['host'] : '%'.$this->getObjectManagerElementName('cache.memcache_host').'%';
|
||||||
|
$memcachePort = !empty($cacheDriver['port']) ? $cacheDriver['port'] : '%'.$this->getObjectManagerElementName('cache.memcache_port').'%';
|
||||||
|
$cacheDef = new Definition($memcacheClass);
|
||||||
|
$memcacheInstance = new Definition($memcacheInstanceClass);
|
||||||
|
$memcacheInstance->addMethodCall('connect', array(
|
||||||
|
$memcacheHost, $memcachePort
|
||||||
|
));
|
||||||
|
$container->setDefinition($this->getObjectManagerElementName(sprintf('%s_memcache_instance', $objectManager['name'])), $memcacheInstance);
|
||||||
|
$cacheDef->addMethodCall('setMemcache', array(new Reference($this->getObjectManagerElementName(sprintf('%s_memcache_instance', $objectManager['name'])))));
|
||||||
|
break;
|
||||||
|
case 'memcached':
|
||||||
|
$memcachedClass = !empty($cacheDriver['class']) ? $cacheDriver['class'] : '%'.$this->getObjectManagerElementName('cache.memcached.class').'%';
|
||||||
|
$memcachedInstanceClass = !empty($cacheDriver['instance_class']) ? $cacheDriver['instance_class'] : '%'.$this->getObjectManagerElementName('cache.memcached_instance.class').'%';
|
||||||
|
$memcachedHost = !empty($cacheDriver['host']) ? $cacheDriver['host'] : '%'.$this->getObjectManagerElementName('cache.memcached_host').'%';
|
||||||
|
$memcachedPort = !empty($cacheDriver['port']) ? $cacheDriver['port'] : '%'.$this->getObjectManagerElementName('cache.memcached_port').'%';
|
||||||
|
$cacheDef = new Definition($memcachedClass);
|
||||||
|
$memcachedInstance = new Definition($memcachedInstanceClass);
|
||||||
|
$memcachedInstance->addMethodCall('addServer', array(
|
||||||
|
$memcachedHost, $memcachedPort
|
||||||
|
));
|
||||||
|
$container->setDefinition($this->getObjectManagerElementName(sprintf('%s_memcached_instance', $objectManager['name'])), $memcachedInstance);
|
||||||
|
$cacheDef->addMethodCall('setMemcached', array(new Reference($this->getObjectManagerElementName(sprintf('%s_memcached_instance', $objectManager['name'])))));
|
||||||
|
break;
|
||||||
|
case 'apc':
|
||||||
|
case 'array':
|
||||||
|
case 'xcache':
|
||||||
|
$cacheDef = new Definition('%'.$this->getObjectManagerElementName(sprintf('cache.%s.class', $cacheDriver['type'])).'%');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new \InvalidArgumentException(sprintf('"%s" is an unrecognized Doctrine cache driver.', $cacheDriver['type']));
|
||||||
|
}
|
||||||
|
|
||||||
|
$cacheDef->setPublic(false);
|
||||||
|
// generate a unique namespace for the given application
|
||||||
|
$namespace = 'sf2'.$this->getMappingResourceExtension().'_'.$objectManager['name'].'_'.md5($container->getParameter('kernel.root_dir').$container->getParameter('kernel.environment'));
|
||||||
|
$cacheDef->addMethodCall('setNamespace', array($namespace));
|
||||||
|
|
||||||
|
$container->setDefinition($cacheDriverService, $cacheDef);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prefixes the relative dependency injection container path with the object manager prefix.
|
* Prefixes the relative dependency injection container path with the object manager prefix.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user