protected function loadPhpredisClient(array $client, ContainerBuilder $container)
{
$connectionCount = count($client['dsns']);
if (1 !== $connectionCount) {
throw new \RuntimeException('Support for RedisArray is not yet implemented.');
}
$dsn = $client['dsns'][0];
/** @var \Snc\RedisBundle\DependencyInjection\Configuration\RedisDsn $dsn */
$phpredisId = sprintf('snc_redis.phpredis.%s', $client['alias']);
$phpredisDef = new Definition($container->getParameter('snc_redis.phpredis_client.class'));
if ($client['logging']) {
$phpredisDef = new Definition($container->getParameter('snc_redis.phpredis_connection_wrapper.class'));
$phpredisDef->addArgument(array('alias' => $client['alias']));
$phpredisDef->addArgument(new Reference('snc_redis.logger'));
}
$phpredisDef->addTag('snc_redis.client', array('alias' => $client['alias']));
$phpredisDef->setPublic(false);
$connectMethod = $client['options']['connection_persistent'] ? 'pconnect' : 'connect';
$connectParameters = array();
if (null !== $dsn->getSocket()) {
$connectParameters[] = $dsn->getSocket();
$connectParameters[] = null;
} else {
$connectParameters[] = $dsn->getHost();
$connectParameters[] = $dsn->getPort();
}
if ($client['options']['connection_timeout']) {
$connectParameters[] = $client['options']['connection_timeout'];
} else {
$connectParameters[] = null;
}
if ($client['options']['connection_persistent']) {
$connectParameters[] = $dsn->getPersistentId();
}
$phpredisDef->addMethodCall($connectMethod, $connectParameters);
if ($client['options']['prefix']) {
$phpredisDef->addMethodCall('setOption', array(\Redis::OPT_PREFIX, $client['options']['prefix']));
}
if (null !== $dsn->getPassword()) {
$phpredisDef->addMethodCall('auth', array($dsn->getPassword()));
}
if (null !== $dsn->getDatabase()) {
$phpredisDef->addMethodCall('select', array($dsn->getDatabase()));
}
$container->setDefinition($phpredisId, $phpredisDef);
$container->setAlias(sprintf('snc_redis.%s', $client['alias']), $phpredisId);
$container->setAlias(sprintf('snc_redis.%s_client', $client['alias']), $phpredisId);
}