/** * @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; }
public function load(Nette\DI\Compiler $compiler, Nette\DI\ContainerBuilder $containerBuilder) { $aspects = []; foreach ($this->aspectsList as $def) { if (!is_array($def)) { if (!is_string($def) && (!$def instanceof \stdClass || empty($def->value)) && !$def instanceof Nette\DI\Statement) { $serialised = Nette\Utils\Json::encode($def); throw new Kdyby\Aop\UnexpectedValueException("The service definition {$serialised} is expected to be an array or Neon entity."); } $def = ['factory' => $def]; } $def['tags'][] = AspectsExtension::ASPECT_TAG; $aspects[] = $def; } $compiler->parseServices($containerBuilder, ['services' => $aspects], $this->prefix ? substr($this->extension->prefix('self'), 0, -5) : NULL); }