Skip to content
This repository has been archived by the owner on Oct 29, 2020. It is now read-only.

Commit

Permalink
Service parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
fabios committed Feb 24, 2014
1 parent 28ce98b commit 4c581f2
Show file tree
Hide file tree
Showing 10 changed files with 377 additions and 33 deletions.
7 changes: 7 additions & 0 deletions DependencyInjection/Configuration.php
Expand Up @@ -108,6 +108,7 @@ private function addMemcacheNode()
$node
->fixXmlConfig('server')
->children()
->scalarNode('connection_id')->defaultNull()->end()
->arrayNode('servers')
->useAttributeAsKey('host')
->prototype('array')
Expand Down Expand Up @@ -150,6 +151,7 @@ private function addMemcachedNode()
$node
->fixXmlConfig('server')
->children()
->scalarNode('connection_id')->defaultNull()->end()
->arrayNode('servers')
->useAttributeAsKey('host')
->prototype('array')
Expand Down Expand Up @@ -189,6 +191,7 @@ private function addRedisNode()

$node
->children()
->scalarNode('connection_id')->defaultNull()->end()
->scalarNode('host')->defaultValue('%doctrine_cache.redis.host%')->end()
->scalarNode('port')->defaultValue('%doctrine_cache.redis.port%')->end()
->end()
Expand All @@ -212,6 +215,8 @@ private function addRiakNode()
->scalarNode('host')->defaultValue('%doctrine_cache.riak.host%')->end()
->scalarNode('port')->defaultValue('%doctrine_cache.riak.port%')->end()
->scalarNode('bucket_name')->defaultValue('doctrine_cache')->end()
->scalarNode('connection_id')->defaultNull()->end()
->scalarNode('bucket_id')->defaultNull()->end()
->arrayNode('bucket_property_list')
->children()
->scalarNode('allow_multiple')->defaultNull()->end()
Expand Down Expand Up @@ -262,6 +267,8 @@ private function addMongoNode()

$node
->children()
->scalarNode('connection_id')->defaultNull()->end()
->scalarNode('collection_id')->defaultNull()->end()
->scalarNode('database_name')->defaultValue('doctrine_cache')->end()
->scalarNode('collection_name')->defaultValue('doctrine_cache')->end()
->scalarNode('server')->defaultValue('%doctrine_cache.mongodb.server%')->end()
Expand Down
25 changes: 23 additions & 2 deletions DependencyInjection/Definition/MemcacheDefinition.php
Expand Up @@ -13,6 +13,7 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* Memcache definition.
Expand All @@ -26,16 +27,36 @@ class MemcacheDefinition extends CacheDefinition
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$memcacheConf = $config['memcache'];
$connRef = $this->getConnectionReference($name, $memcacheConf, $container);

$service->addMethodCall('setMemcache', array($connRef));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$connClass = '%doctrine_cache.memcache.connection.class%';
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass);

foreach ($config['memcache']['servers'] as $host => $server) {
foreach ($config['servers'] as $host => $server) {
$connDef->addMethodCall('addServer', array($host, $server['port']));
}

$connDef->setPublic(false);
$container->setDefinition($connId, $connDef);
$service->addMethodCall('setMemcache', array($connDef));

return new Reference($connId);
}
}
25 changes: 23 additions & 2 deletions DependencyInjection/Definition/MemcachedDefinition.php
Expand Up @@ -13,6 +13,7 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* Memcached definition.
Expand All @@ -26,16 +27,36 @@ class MemcachedDefinition extends CacheDefinition
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$memcachedConf = $config['memcached'];
$connRef = $this->getConnectionReference($name, $memcachedConf, $container);

$service->addMethodCall('setMemcached', array($connRef));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$connClass = '%doctrine_cache.memcached.connection.class%';
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass);

foreach ($config['memcached']['servers'] as $host => $server) {
foreach ($config['servers'] as $host => $server) {
$connDef->addMethodCall('addServer', array($host, $server['port']));
}

$connDef->setPublic(false);
$container->setDefinition($connId, $connDef);
$service->addMethodCall('setMemcached', array($connDef));

return new Reference($connId);
}
}
60 changes: 49 additions & 11 deletions DependencyInjection/Definition/MongodbDefinition.php
Expand Up @@ -13,6 +13,7 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* MongoDB definition.
Expand All @@ -26,24 +27,61 @@ class MongodbDefinition extends CacheDefinition
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$server = $config['mongodb']['server'];
$databaseName = $config['mongodb']['database_name'];
$collectionName = $config['mongodb']['collection_name'];
$connClass = '%doctrine_cache.mongodb.connection.class%';
$memcacheConf = $config['mongodb'];
$collRef = $this->getCollectionReference($name, $memcacheConf, $container);

$service->setArguments(array($collRef));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getCollectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['collection_id'])) {
return new Reference($config['collection_id']);
}

$databaseName = $config['database_name'];
$collectionName = $config['collection_name'];
$collClass = '%doctrine_cache.mongodb.collection.class%';
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$collId = sprintf('doctrine_cache.services.%s.collection', $name);
$collDef = new Definition($collClass, array($databaseName, $collectionName));
$connDef = new Definition($connClass, array($server));

$connDef->addMethodCall('connect');
$container->setDefinition($connId, $connDef);
$connRef = $this->getConnectionReference($name, $config, $container);

$container->setDefinition($collId, $collDef)
->setFactoryMethod('selectCollection')
->setFactoryService($connId)
->setFactoryService($connRef)
->setPublic(false);

$service->setArguments(array($collDef));
return new Reference($collId);
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$server = $config['server'];
$connClass = '%doctrine_cache.mongodb.connection.class%';
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass, array($server));

$connDef->addMethodCall('connect');
$container->setDefinition($connId, $connDef);

return new Reference($connId);
}
}
27 changes: 24 additions & 3 deletions DependencyInjection/Definition/RedisDefinition.php
Expand Up @@ -13,6 +13,7 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* Redis definition.
Expand All @@ -26,8 +27,27 @@ class RedisDefinition extends CacheDefinition
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$host = $config['redis']['host'];
$port = $config['redis']['port'];
$memcacheConf = $config['redis'];
$connRef = $this->getConnectionReference($name, $memcacheConf, $container);

$service->addMethodCall('setRedis', array($connRef));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$host = $config['host'];
$port = $config['port'];
$connClass = '%doctrine_cache.redis.connection.class%';
$connId = sprintf('doctrine_cache.services.%s_redis.connection', $name);
$connDef = new Definition($connClass);
Expand All @@ -36,6 +56,7 @@ public function configure($name, array $config, Definition $service, ContainerBu
$connDef->addMethodCall('connect', array($host, $port));

$container->setDefinition($connId, $connDef);
$service->addMethodCall('setRedis', array($container->setDefinition($connId, $connDef)));

return new Reference($connId);
}
}
67 changes: 52 additions & 15 deletions DependencyInjection/Definition/RiakDefinition.php
Expand Up @@ -27,27 +27,64 @@ class RiakDefinition extends CacheDefinition
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$host = $config['riak']['host'];
$port = $config['riak']['port'];
$bucketName = $config['riak']['bucket_name'];
$bucketClass = '%doctrine_cache.riak.bucket.class%';
$connClass = '%doctrine_cache.riak.connection.class%';
$bucketId = sprintf('doctrine_cache.services.%s.bucket', $name);
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass, array($host, $port));
$bucketDef = new Definition($bucketClass, array($connDef, $bucketName));
$riakConf = $config['riak'];
$bucketRef = $this->getBucketReference($name, $riakConf, $container);

$connDef->setPublic(false);
$bucketDef->setPublic(false);
$service->setArguments(array($bucketRef));
}

$container->setDefinition($connId, $connDef);
/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getBucketReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['bucket_id'])) {
return new Reference($config['bucket_id']);
}

$bucketName = $config['bucket_name'];
$bucketClass = '%doctrine_cache.riak.bucket.class%';
$bucketId = sprintf('doctrine_cache.services.%s.bucket', $name);
$connDef = $this->getConnectionReference($name, $config, $container);
$bucketDef = new Definition($bucketClass, array($connDef, $bucketName));

$bucketDef->setPublic(false);
$container->setDefinition($bucketId, $bucketDef);

if ( ! empty($config['riak']['bucket_property_list'])) {
$this->configureBucketPropertyList($name, $config['riak']['bucket_property_list'], $bucketDef, $container);
if ( ! empty($config['bucket_property_list'])) {
$this->configureBucketPropertyList($name, $config['bucket_property_list'], $bucketDef, $container);
}

$service->setArguments(array($bucketDef));
return new Reference($bucketId);
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$host = $config['host'];
$port = $config['port'];
$connClass = '%doctrine_cache.riak.connection.class%';
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass, array($host, $port));

$connDef->setPublic(false);
$container->setDefinition($connId, $connDef);

return new Reference($connId);
}

/**
Expand Down

0 comments on commit 4c581f2

Please sign in to comment.