Skip to content

Commit f9aa6f7

Browse files
committed
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 (doctrine/DoctrineBundle#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 :+1: --------------------------------------------------------------------------- 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
2 parents 82b3cdc + a2b3d3c commit f9aa6f7

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bridge\Doctrine\DependencyInjection;
1313

1414
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
15+
use Symfony\Component\DependencyInjection\Alias;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
1617
use Symfony\Component\DependencyInjection\Definition;
1718
use Symfony\Component\DependencyInjection\Reference;
@@ -285,6 +286,68 @@ protected function detectMetadataDriver($dir, ContainerBuilder $container)
285286
return null;
286287
}
287288

289+
/**
290+
* Loads a configured object manager metadata, query or result cache driver.
291+
*
292+
* @param array $objectManager A configured object manager.
293+
* @param ContainerBuilder $container A ContainerBuilder instance.
294+
* @param string $cacheName
295+
*
296+
* @throws \InvalidArgumentException In case of unknown driver type.
297+
*/
298+
protected function loadObjectManagerCacheDriver(array $objectManager, ContainerBuilder $container, $cacheName)
299+
{
300+
$cacheDriver = $objectManager[$cacheName.'_driver'];
301+
$cacheDriverService = $this->getObjectManagerElementName($objectManager['name'] . '_' . $cacheName);
302+
303+
switch ($cacheDriver['type']) {
304+
case 'service':
305+
$container->setAlias($cacheDriverService, new Alias($cacheDriver['id'], false));
306+
307+
return;
308+
case 'memcache':
309+
$memcacheClass = !empty($cacheDriver['class']) ? $cacheDriver['class'] : '%'.$this->getObjectManagerElementName('cache.memcache.class').'%';
310+
$memcacheInstanceClass = !empty($cacheDriver['instance_class']) ? $cacheDriver['instance_class'] : '%'.$this->getObjectManagerElementName('cache.memcache_instance.class').'%';
311+
$memcacheHost = !empty($cacheDriver['host']) ? $cacheDriver['host'] : '%'.$this->getObjectManagerElementName('cache.memcache_host').'%';
312+
$memcachePort = !empty($cacheDriver['port']) ? $cacheDriver['port'] : '%'.$this->getObjectManagerElementName('cache.memcache_port').'%';
313+
$cacheDef = new Definition($memcacheClass);
314+
$memcacheInstance = new Definition($memcacheInstanceClass);
315+
$memcacheInstance->addMethodCall('connect', array(
316+
$memcacheHost, $memcachePort
317+
));
318+
$container->setDefinition($this->getObjectManagerElementName(sprintf('%s_memcache_instance', $objectManager['name'])), $memcacheInstance);
319+
$cacheDef->addMethodCall('setMemcache', array(new Reference($this->getObjectManagerElementName(sprintf('%s_memcache_instance', $objectManager['name'])))));
320+
break;
321+
case 'memcached':
322+
$memcachedClass = !empty($cacheDriver['class']) ? $cacheDriver['class'] : '%'.$this->getObjectManagerElementName('cache.memcached.class').'%';
323+
$memcachedInstanceClass = !empty($cacheDriver['instance_class']) ? $cacheDriver['instance_class'] : '%'.$this->getObjectManagerElementName('cache.memcached_instance.class').'%';
324+
$memcachedHost = !empty($cacheDriver['host']) ? $cacheDriver['host'] : '%'.$this->getObjectManagerElementName('cache.memcached_host').'%';
325+
$memcachedPort = !empty($cacheDriver['port']) ? $cacheDriver['port'] : '%'.$this->getObjectManagerElementName('cache.memcached_port').'%';
326+
$cacheDef = new Definition($memcachedClass);
327+
$memcachedInstance = new Definition($memcachedInstanceClass);
328+
$memcachedInstance->addMethodCall('addServer', array(
329+
$memcachedHost, $memcachedPort
330+
));
331+
$container->setDefinition($this->getObjectManagerElementName(sprintf('%s_memcached_instance', $objectManager['name'])), $memcachedInstance);
332+
$cacheDef->addMethodCall('setMemcached', array(new Reference($this->getObjectManagerElementName(sprintf('%s_memcached_instance', $objectManager['name'])))));
333+
break;
334+
case 'apc':
335+
case 'array':
336+
case 'xcache':
337+
$cacheDef = new Definition('%'.$this->getObjectManagerElementName(sprintf('cache.%s.class', $cacheDriver['type'])).'%');
338+
break;
339+
default:
340+
throw new \InvalidArgumentException(sprintf('"%s" is an unrecognized Doctrine cache driver.', $cacheDriver['type']));
341+
}
342+
343+
$cacheDef->setPublic(false);
344+
// generate a unique namespace for the given application
345+
$namespace = 'sf2'.$this->getMappingResourceExtension().'_'.$objectManager['name'].'_'.md5($container->getParameter('kernel.root_dir').$container->getParameter('kernel.environment'));
346+
$cacheDef->addMethodCall('setNamespace', array($namespace));
347+
348+
$container->setDefinition($cacheDriverService, $cacheDef);
349+
}
350+
288351
/**
289352
* Prefixes the relative dependency injection container path with the object manager prefix.
290353
*

0 commit comments

Comments
 (0)