/**
* @param \Nette\DI\CompilerExtension $extension
* @param string|\stdClass $cache
* @param string $suffix
* @param bool $debug
* @return string
*/
public static function processCache(Nette\DI\CompilerExtension $extension, $cache, $suffix, $debug = NULL)
{
$builder = $extension->getContainerBuilder();
$impl = $cache instanceof \stdClass ? $cache->value : ($cache instanceof Statement ? $cache->entity : (string) $cache);
list($cache) = self::filterArgs($cache);
/** @var Statement $cache */
if (isset(self::$cacheDriverClasses[$impl])) {
$cache->entity = self::$cacheDriverClasses[$impl];
}
if ($impl === 'default') {
$cache->arguments[1] = 'Doctrine.' . ucfirst($suffix);
$cache->arguments[2] = $debug !== NULL ? $debug : $builder->parameters['debugMode'];
}
if ($impl === 'filesystem') {
$cache->arguments[] = $builder->parameters['tempDir'] . '/cache/Doctrine.' . ucfirst($suffix);
}
$def = $builder->addDefinition($serviceName = $extension->prefix('cache.' . $suffix))->setClass('Doctrine\\Common\\Cache\\Cache')->setFactory($cache->entity, $cache->arguments)->setAutowired(FALSE);
if (method_exists($def, 'setInject')) {
@$def->setInject(FALSE);
// wow, such deprecated, many BC!
}
if (class_exists($cache->entity) && is_subclass_of($cache->entity, 'Doctrine\\Common\\Cache\\CacheProvider')) {
$ns = 'Kdyby_' . $serviceName;
if (preg_match('~^(?P<projectRoot>.+)(?:\\\\|\\/)vendor(?:\\\\|\\/)kdyby(?:\\\\|\\/)doctrine-cache(?:\\\\|\\/).+\\z~i', __DIR__, $m)) {
$ns .= '_' . substr(md5($m['projectRoot']), 0, 8);
}
$def->addSetup('setNamespace', array($ns));
}
return '@' . $serviceName;
}