protected function createWithConfig(ContainerInterface $container, $configKey)
{
$config = $this->retrieveConfig($container, $configKey, 'cache');
if (!array_key_exists('class', $config)) {
throw new OutOfBoundsException('Missing "class" config key');
}
$instance = null;
if (array_key_exists('instance', $config)) {
$instance = is_string($config['instance']) ? $container->get($config['instance']) : $config['instance'];
}
switch ($config['class']) {
case FilesystemCache::class:
$cache = new $config['class']();
break;
case PredisCache::class:
$cache = new $config['class']($instance);
break;
default:
$cache = new $config['class']();
}
if ($cache instanceof MemcacheCache) {
$cache->setMemcache($instance);
} elseif ($cache instanceof MemcachedCache) {
$cache->setMemcached($instance);
} elseif ($cache instanceof RedisCache) {
$cache->setRedis($instance);
}
if ($cache instanceof CacheProvider && array_key_exists('namespace', $config)) {
$cache->setNamespace($config['namespace']);
}
return $cache;
}