/** * @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; }