merged branch bamarni/master (PR #4153)
Commits
-------
a2b3d3c
added cache service definition
Discussion
----------
[Doctrine Bridge] Added a method to load a cache definition
Bug fix: no
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: -
Todo: -
Following this discussion (https://github.com/doctrine/DoctrineBundle/pull/62), this will let DoctrineBundle, MongodbBundle and CouchdbBundle share the same code for cache definitions.
---------------------------------------------------------------------------
by dlsniper at 2012-04-30T06:56:49Z
+1 for this PR.
---------------------------------------------------------------------------
by stof at 2012-04-30T06:57:58Z
👍
---------------------------------------------------------------------------
by fabpot at 2012-04-30T15:41:05Z
Can you add a note abou this change in the CHANGELOG?
---------------------------------------------------------------------------
by stof at 2012-04-30T15:46:48Z
does it really need to be in the changelog ? End-users don't know about this at all. The only guys affected by this change are the maintainers of the different Doctrine bundles as they can remove some code now.
---------------------------------------------------------------------------
by fabpot at 2012-04-30T16:41:21Z
@stof: right
@bamarni: Can you squash your commits?
---------------------------------------------------------------------------
by bamarni at 2012-04-30T17:03:38Z
@fabpot : done
---------------------------------------------------------------------------
by dlsniper at 2012-04-30T17:22:07Z
@bamarni can you also do a patch for the docs after this gets merged so that people know about this change and know how to use it?
Thank you!
---------------------------------------------------------------------------
by bamarni at 2012-04-30T17:29:05Z
@dlsniper : no problem ;)
---------------------------------------------------------------------------
by fabpot at 2012-04-30T18:29:03Z
ping @beberlei
This commit is contained in:
commit
f9aa6f7d1e
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Bridge\Doctrine\DependencyInjection;
|
||||
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use Symfony\Component\DependencyInjection\Alias;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
@ -285,6 +286,68 @@ abstract class AbstractDoctrineExtension extends Extension
|
||||
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.
|
||||
*
|
||||
|
Reference in New Issue
Block a user