Adds new service definition.
public addDefinition ( $name, |
||
$definition | ||
Результат |
private function addWebLoader(\Nette\DI\ContainerBuilder $builder, $name, $config) { $filesServiceName = $this->prefix($name . 'Files'); $files = $builder->addDefinition($filesServiceName)->setClass('WebLoader\\FileCollection')->setArguments(array($config['sourceDir'])); foreach ($config['files'] as $file) { // finder support if (is_array($file) && isset($file['files']) && (isset($file['in']) || isset($file['from']))) { $finder = \Nette\Utils\Finder::findFiles($file['files']); unset($file['files']); foreach ($file as $method => $params) { call_user_func_array(array($finder, $method), array($params)); } foreach ($finder as $foundFile) { $files->addSetup('addFile', array((string) $foundFile)); } } else { $files->addSetup('addFile', array($file)); } } $files->addSetup('addRemoteFiles', array($config['remoteFiles'])); $compiler = $builder->addDefinition($this->prefix($name . 'Compiler'))->setClass('WebLoader\\Compiler')->setArguments(array('@' . $filesServiceName, $config['namingConvention'], $config['tempDir'])); $compiler->addSetup('setJoinFiles', array($config['joinFiles'])); foreach ($config['filters'] as $filter) { $compiler->addSetup('addFilter', array($filter)); } foreach ($config['fileFilters'] as $filter) { $compiler->addSetup('addFileFilter', array($filter)); } // todo css media }
private function addWebLoader(ContainerBuilder $builder, $name, $config) { $filesServiceName = $this->prefix($name . 'Files'); $files = $builder->addDefinition($filesServiceName)->setClass('WebLoader\\FileCollection')->setArguments(array($config['sourceDir'])); foreach ($this->findFiles($config['files'], $config['sourceDir']) as $file) { $files->addSetup('addFile', array($file)); } foreach ($this->findFiles($config['watchFiles'], $config['sourceDir']) as $file) { $files->addSetup('addWatchFile', array($file)); } $files->addSetup('addRemoteFiles', array($config['remoteFiles'])); $compiler = $builder->addDefinition($this->prefix($name . 'Compiler'))->setClass('WebLoader\\Compiler')->setArguments(array('@' . $filesServiceName, $config['namingConvention'], $config['tempDir'])); $compiler->addSetup('setJoinFiles', array($config['joinFiles'])); if ($builder->parameters['webloader']['debugger']) { $compiler->addSetup('@' . $this->prefix('tracyPanel') . '::addLoader', array($name, '@' . $this->prefix($name . 'Compiler'))); } foreach ($config['filters'] as $filter) { $compiler->addSetup('addFilter', array($filter)); } foreach ($config['fileFilters'] as $filter) { $compiler->addSetup('addFileFilter', array($filter)); } if (isset($config['debug']) && $config['debug']) { $compiler->addSetup('enableDebugging'); } $compiler->addSetup('setCheckLastModified', array($config['checkLastModified'])); // todo css media }
/** * Routes definition * * @param ContainerBuilder $container Container * @param array $config Config * * @return void */ protected function loadRoutes(ContainerBuilder $container, $config) { $container->addDefinition($this->prefix('storages'))->setClass('MouseOver\\Storage\\Application\\StorageList'); $container->addDefinition($this->prefix('responder'))->setClass('MouseOver\\Storage\\Application\\StorageResponder'); $container->addDefinition($this->prefix('linkResolver'))->setClass('MouseOver\\Storage\\Application\\StorageLinkResolver', [$config['module']]); $container->getDefinition('nette.latte')->addSetup('MouseOver\\Storage\\Application\\StorageMacros::install($service->getCompiler(), ?)', array($this->prefix('@linkResolver'))); $routesList = $container->addDefinition($this->prefix('storageRoutes'))->setClass('Nette\\Application\\Routers\\RouteList')->setAutowired(false); $routesList->addSetup('$service[] = new Nette\\Application\\Routers\\Route(?, function ($presenter, $storage, $file) { return ?->handle($storage, $file, $presenter->request->getParameters()); })', array($config['module'] . '/<storage>/<file [a-zA-Z0-9\\-_.\\/]+>', $this->prefix('@responder'))); $container->getDefinition('router')->addSetup('MouseOver\\Storage\\DI\\StorageExtension::prependTo($service, ?)', [$this->prefix('@storageRoutes')]); }
/** * @param \Nette\DI\ContainerBuilder $container * @param array $config */ private function setupTemplating(ContainerBuilder $container, array $config) { $def = $container->addDefinition($this->prefix('templateFilesFormatter'))->setClass('Lohini\\Templating\\TemplateFilesFormatter')->addSetup('$skin', [$config['skin']]); foreach ($config['dirs'] as $dir => $priority) { $def->addSetup('addDir', Validators::isNumericInt($dir) ? [$priority] : [$container->expand($dir), $priority]); } }
/** * @param ContainerBuilder $container * @param array $config */ private function processAuthenticators(ContainerBuilder $container, array $config) { $authentication = $container->addDefinition($this->prefix('authentication'))->setClass('Flame\\Rest\\Security\\Authentication'); if (!$container->parameters['debugMode'] && count($config['ips'])) { $ipAuthenticator = $container->addDefinition($this->prefix('ipAuthenticator'))->setClass('Flame\\Rest\\Security\\Authenticators\\IpAuthenticator')->setArguments(array($config['ips'])); $authentication->addSetup('addAuthenticator', array($ipAuthenticator)); } if (!$container->parameters['debugMode'] && count($config['referers'])) { $refererAuthenticator = $container->addDefinition($this->prefix('refererAuthenticator'))->setClass('Flame\\Rest\\Security\\Authenticators\\RefererAuthenticator')->setArguments(array($config['referers'])); $authentication->addSetup('addAuthenticator', array($refererAuthenticator)); } foreach ($config['authenticators'] as $k => $authenticatorConfig) { $authenticator = $container->addDefinition($this->prefix('authenticator' . $k))->setClass($authenticatorConfig); $authentication->addSetup('addAuthenticator', array($authenticator)); } }
private function setupCompileTemplatesCommand(ContainerBuilder $builder, array $config) { $config = $this->validateConfig($this->compileTemplatesDefaults, $config, 'compileTemplates'); Validators::assertField($config, 'source', 'string|array'); $builder->addDefinition($this->prefix('compileTemplates'))->setClass(CompileTemplatesCommand::class, [array_map(function ($directory) use($builder) { Validators::assert($directory, 'string'); return Helpers::expand($directory, $builder->parameters); }, (array) $config['source'])])->addTag(ConsoleExtension::TAG_COMMAND)->setAutowired(false); }
/** * Adds mapper service into container * @return ServiceDefinition */ protected function configMapper(ContainerBuilder $builder, array $config) { if ($config['defaultEntityNamespace'] !== NULL && !is_string($config['defaultEntityNamespace'])) { throw new \RuntimeException('DefaultEntityNamespace must be NULL or string, ' . gettype($config['defaultEntityNamespace']) . ' given'); } $mapper = $builder->addDefinition($this->prefix('mapper'))->setClass($config['mapper'], array($config['defaultEntityNamespace'])); $this->processEntityProviders($mapper, $config); $this->processUserEntities($mapper, $config); return $mapper; }
/** * @param string $serviceName * @param string $cacheDirectory */ private function createEagerProxy($serviceName, $cacheDirectory) { $definition = $this->builder->getDefinition($serviceName); $this->builder->removeDefinition($serviceName); $hiddenServiceName = $this->prefix($serviceName); $proxyClassName = $definition->getClass() . md5(serialize($definition)); $this->builder->addDefinition($serviceName)->setClass($proxyClassName)->setFactory('@' . $this->prefix('eagerServiceFactory') . '::create', array($hiddenServiceName, $proxyClassName)); $this->builder->addDefinition($hiddenServiceName, $definition)->setAutowired(false); if (!class_exists($proxyClassName)) { $classGenerator = new ClassGenerator(); $this->proxyGenerator->generate(new \ReflectionClass($definition->getClass()), $classGenerator); $classGenerator->setName($proxyClassName); $code = '<?php' . ClassGenerator::LINE_FEED . $classGenerator->generate(); $tempPath = $cacheDirectory . uniqid() . ".php"; $backslashPos = strrpos($proxyClassName, '\\'); $newPath = $cacheDirectory . substr($proxyClassName, $backslashPos ? $backslashPos + 1 : 0) . ".php"; file_put_contents($tempPath, $code, LOCK_EX); rename($tempPath, $newPath); require_once $newPath; } }
private function setupDatabase(ContainerBuilder $container, array $config) { if (isset($config['dsn'])) { $config = array('default' => $config); } $autowired = true; foreach ((array) $config as $name => $info) { if (!is_array($info)) { continue; } $this->validate($info, $this->databaseDefaults, 'flunorette'); $info += array('autowired' => $autowired) + $this->databaseDefaults; $autowired = false; foreach (array('transactionCounter', 'delimiteMode', 'lazy', 'driverClass') as $option) { if (isset($info[$option])) { $info['options'][$option] = $info[$option]; } } foreach ((array) $info['options'] as $key => $value) { if (preg_match('#^PDO::\\w+\\z#', $key)) { unset($info['options'][$key]); $info['options'][constant($key)] = $value; } } if (!$info['reflection']) { $reflection = null; } elseif (is_string($info['reflection'])) { $reflection = new Statement(preg_match('#^[a-z]+\\z#', $info['reflection']) ? 'Flunorette\\Reflections\\' . ucfirst($info['reflection']) . 'Reflection' : $info['reflection'], strtolower($info['reflection']) === 'discovered' ? array('@self') : array()); } else { $tmp = Compiler::filterArguments(array($info['reflection'])); $reflection = reset($tmp); } $connection = $container->addDefinition($this->prefix($name))->setClass('Flunorette\\Connection', array($info['dsn'], $info['user'], $info['password'], $info['options']))->setAutowired($info['autowired'])->addSetup('setCacheStorage')->addSetup('Nette\\Diagnostics\\Debugger::getBlueScreen()->addPanel(?)', array('Flunorette\\Bridges\\Nette\\Diagnostics\\ConnectionPanel::renderException')); if ($container->parameters['debugMode'] && $info['debugger']) { $connection->addSetup('Flunorette\\Helpers::createDebugPanel', array($connection, !empty($info['explain']), $name)); } } }
/** * Parses section 'services' from (unexpanded) configuration file. * @return void */ public static function parseServices(ContainerBuilder $builder, array $config, $namespace = NULL) { $services = isset($config['services']) ? $config['services'] : array(); $factories = isset($config['factories']) ? $config['factories'] : array(); $all = array_merge($services, $factories); uasort($all, function ($a, $b) { return strcmp(Config\Helpers::isInheriting($a), Config\Helpers::isInheriting($b)); }); if (!empty($config['factories'])) { trigger_error("Section 'factories' is deprecated, move definitions to section 'services' and append key 'autowired: no'.", E_USER_DEPRECATED); } foreach ($all as $origName => $def) { if ((string) (int) $origName === (string) $origName) { $name = count($builder->getDefinitions()) . preg_replace('#\\W+#', '_', $def instanceof \stdClass ? ".{$def->value}" : (is_scalar($def) ? ".{$def}" : '')); } elseif (array_key_exists($origName, $services) && array_key_exists($origName, $factories)) { throw new ServiceCreationException("It is not allowed to use services and factories with the same name: '{$origName}'."); } else { $name = ($namespace ? $namespace . '.' : '') . strtr($origName, '\\', '_'); } $params = $builder->parameters; if (is_array($def) && isset($def['parameters'])) { foreach ((array) $def['parameters'] as $k => $v) { $v = explode(' ', is_int($k) ? $v : $k); $params[end($v)] = $builder::literal('$' . end($v)); } } $def = Helpers::expand($def, $params); if (($parent = Config\Helpers::takeParent($def)) && $parent !== $name) { $builder->removeDefinition($name); $definition = $builder->addDefinition($name, $parent === Config\Helpers::OVERWRITE ? NULL : unserialize(serialize($builder->getDefinition($parent)))); } elseif ($builder->hasDefinition($name)) { $definition = $builder->getDefinition($name); } else { $definition = $builder->addDefinition($name); } try { static::parseService($definition, $def); } catch (\Exception $e) { throw new ServiceCreationException("Service '{$name}': " . $e->getMessage(), NULL, $e); } if (array_key_exists($origName, $factories)) { $definition->setAutowired(FALSE); } if ($definition->class === 'self') { $definition->class = $origName; trigger_error("Replace service definition '{$origName}: self' with '- {$origName}'.", E_USER_DEPRECATED); } if ($definition->factory && $definition->factory->entity === 'self') { $definition->factory->entity = $origName; trigger_error("Replace service definition '{$origName}: self' with '- {$origName}'.", E_USER_DEPRECATED); } } }
private function loadDefinitions(ContainerBuilder $builder) { $classes = $this->robotLoader->getIndexedClasses(); $markerInterface = new ClassType(IServiceMarker::class); foreach ($classes as $key => $val) { if (Strings::endsWith($key, 'Service')) { $reflection = new ClassType($key); $serviceName = '_auto.' . str_replace("\\", "_", $key); if (!$reflection->isAbstract() && $reflection->isSubclassOf($markerInterface)) { $builder->addDefinition($serviceName)->setClass($key); } } } }
/** * Parses section 'services' from configuration file. * * @return void */ public static function parseServices(Nette\DI\ContainerBuilder $container, array $config, $namespace = null) { $services = isset($config['services']) ? $config['services'] : array(); $factories = isset($config['factories']) ? $config['factories'] : array(); if ($tmp = array_intersect_key($services, $factories)) { $tmp = implode("', '", array_keys($tmp)); throw new Nette\DI\ServiceCreationException("It is not allowed to use services and factories with the same names: '{$tmp}'."); } $all = $services + $factories; uasort($all, function ($a, $b) { return strcmp(Helpers::isInheriting($a), Helpers::isInheriting($b)); }); foreach ($all as $name => $def) { $shared = array_key_exists($name, $services); $name = ($namespace ? $namespace . '.' : '') . $name; if (($parent = Helpers::takeParent($def)) && $parent !== $name) { $container->removeDefinition($name); $definition = $container->addDefinition($name); if ($parent !== Helpers::OVERWRITE) { foreach ($container->getDefinition($parent) as $k => $v) { $definition->{$k} = unserialize(serialize($v)); // deep clone } } } elseif ($container->hasDefinition($name)) { $definition = $container->getDefinition($name); if ($definition->shared !== $shared) { throw new Nette\DI\ServiceCreationException("It is not allowed to use service and factory with the same name '{$name}'."); } } else { $definition = $container->addDefinition($name); } try { static::parseService($definition, $def, $shared); } catch (\Exception $e) { throw new Nette\DI\ServiceCreationException("Service '{$name}': " . $e->getMessage(), null, $e); } } }
/** * @param ContainerBuilder $containerBuilder * * @return \Nette\DI\ServiceDefinition */ protected function createTimestampStorage(ContainerBuilder $containerBuilder) { return $containerBuilder->addDefinition($this->prefix('timestampStorage'))->setAutowired(FALSE)->setInject(FALSE); }
private function setupDatabase(ContainerBuilder $container, array $config) { if (isset($config['dsn'])) { $config = array('default' => $config); } $autowired = TRUE; foreach ((array) $config as $name => $info) { if (!is_array($info)) { continue; } $info += $this->databaseDefaults + array('autowired' => $autowired); $autowired = FALSE; foreach ((array) $info['options'] as $key => $value) { if (preg_match('#^PDO::\\w+\\z#', $key)) { unset($info['options'][$key]); $info['options'][constant($key)] = $value; } } if (!$info['reflection']) { $reflection = NULL; } elseif (is_string($info['reflection'])) { $reflection = new Nette\DI\Statement(preg_match('#^[a-z]+\\z#', $info['reflection']) ? 'Nette\\Database\\Reflection\\' . ucfirst($info['reflection']) . 'Reflection' : $info['reflection'], strtolower($info['reflection']) === 'discovered' ? array('@self') : array()); } else { $tmp = Nette\DI\Compiler::filterArguments(array($info['reflection'])); $reflection = reset($tmp); } $connection = $container->addDefinition($this->prefix("database.{$name}"))->setClass('Nette\\Database\\Connection', array($info['dsn'], $info['user'], $info['password'], $info['options']))->setAutowired($info['autowired'])->addSetup('setContext', array(new Nette\DI\Statement('Nette\\Database\\Context', array('@self', $reflection))))->addSetup('Nette\\Diagnostics\\Debugger::getBlueScreen()->addPanel(?)', array('Nette\\Database\\Diagnostics\\ConnectionPanel::renderException')); $container->addDefinition($this->prefix("database.{$name}.context"))->setClass('Nette\\Database\\Context')->setFactory(array($connection, 'getContext'))->setAutowired($info['autowired']); if ($container->parameters['debugMode'] && $info['debugger']) { $connection->addSetup('Nette\\Database\\Helpers::createDebugPanel', array($connection, !empty($info['explain']), $name)); } } }
/** * * @param string $class_name * @param Nette\DI\CompilerExtension $builder * @return string */ public function addDefinition($class_name, Nette\DI\ContainerBuilder $builder) { $name = str_replace('\\', '_', $class_name); $builder->addDefinition($this->prefix(str_replace('\\', '_', $name)))->setClass($class_name)->setInject(true); return $name; }
private function setupDatabase(ContainerBuilder $container, array $config) { $container->addDefinition($this->prefix('database'))->setClass('Nette\\DI\\NestedAccessor', array('@container', $this->prefix('database'))); if (isset($config['dsn'])) { $config = array('default' => $config); } $autowired = TRUE; foreach ((array) $config as $name => $info) { if (!is_array($info)) { continue; } $info += $this->databaseDefaults + array('autowired' => $autowired); $autowired = FALSE; foreach ((array) $info['options'] as $key => $value) { unset($info['options'][$key]); $info['options'][constant($key)] = $value; } $connection = $container->addDefinition($this->prefix("database.{$name}"))->setClass('Nette\\Database\\Connection', array($info['dsn'], $info['user'], $info['password'], $info['options']))->setAutowired($info['autowired'])->addSetup('setCacheStorage')->addSetup('Nette\\Diagnostics\\Debugger::$blueScreen->addPanel(?)', array('Nette\\Database\\Diagnostics\\ConnectionPanel::renderException')); if ($info['reflection']) { $connection->addSetup('setDatabaseReflection', is_string($info['reflection']) ? array(new Nette\DI\Statement(preg_match('#^[a-z]+$#', $info['reflection']) ? 'Nette\\Database\\Reflection\\' . ucfirst($info['reflection']) . 'Reflection' : $info['reflection'])) : Nette\Config\Compiler::filterArguments(array($info['reflection']))); } if ($container->parameters['debugMode'] && $info['debugger']) { $panel = $container->addDefinition($this->prefix("database.{$name}ConnectionPanel"))->setClass('Nette\\Database\\Diagnostics\\ConnectionPanel')->setAutowired(FALSE)->addSetup('$explain', !empty($info['explain']))->addSetup('Nette\\Diagnostics\\Debugger::$bar->addPanel(?)', array('@self')); $connection->addSetup('$service->onQuery[] = ?', array(array($panel, 'logQuery'))); } } }
/** * Parses section 'services' from configuration file. * @return void */ public static function parseServices(Nette\DI\ContainerBuilder $container, array $config, $namespace = NULL) { $services = isset($config['services']) ? $config['services'] : array(); $factories = isset($config['factories']) ? $config['factories'] : array(); $all = array_merge($services, $factories); uasort($all, function ($a, $b) { return strcmp(Helpers::isInheriting($a), Helpers::isInheriting($b)); }); foreach ($all as $origName => $def) { $shared = array_key_exists($origName, $services); if ((string) (int) $origName === (string) $origName) { $name = (string) (count($container->getDefinitions()) + 1); } elseif ($shared && array_key_exists($origName, $factories)) { throw new Nette\DI\ServiceCreationException("It is not allowed to use services and factories with the same name: '{$origName}'."); } else { $name = ($namespace ? $namespace . '.' : '') . strtr($origName, '\\', '_'); } if (($parent = Helpers::takeParent($def)) && $parent !== $name) { $container->removeDefinition($name); $definition = $container->addDefinition($name); if ($parent !== Helpers::OVERWRITE) { foreach ($container->getDefinition($parent) as $k => $v) { $definition->{$k} = unserialize(serialize($v)); // deep clone } } } elseif ($container->hasDefinition($name)) { $definition = $container->getDefinition($name); if ($definition->shared !== $shared) { throw new Nette\DI\ServiceCreationException("It is not allowed to use service and factory with the same name '{$name}'."); } } else { $definition = $container->addDefinition($name); } try { static::parseService($definition, $def, $shared); } catch (\Exception $e) { throw new Nette\DI\ServiceCreationException("Service '{$name}': " . $e->getMessage(), NULL, $e); } } }
function loadConfiguration(ContainerBuilder $container, array $config) { $container->addDefinition('cacheJournal')->setClass('Nette\\Caching\\Storages\\FileJournal', array('%tempDir%')); $container->addDefinition('cacheStorage')->setClass('Nette\\Caching\\Storages\\FileStorage', array('%tempDir%')); $container->addDefinition('templateCacheStorage')->setClass('Nette\\Caching\\Storages\\PhpFileStorage', array('%tempDir%'))->setAutowired(FALSE); $container->addDefinition('httpRequestFactory')->setClass('Nette\\Http\\RequestFactory')->addSetup('setEncoding', array('UTF-8'))->setInternal(TRUE)->setShared(FALSE); $container->addDefinition('httpRequest')->setClass('Nette\\Http\\Request')->setFactory('@httpRequestFactory::createHttpRequest'); $container->addDefinition('httpResponse')->setClass('Nette\\Http\\Response'); $container->addDefinition('httpContext')->setClass('Nette\\Http\\Context'); $session = $container->addDefinition('session')->setClass('Nette\\Http\\Session'); if (isset($config['session'])) { Validators::assertField($config, 'session', 'array'); $session->addSetup('setOptions', array($config['session'])); } if (isset($config['session']['expiration'])) { $session->addSetup('setExpiration', array($config['session']['expiration'])); } $container->addDefinition('user')->setClass('Nette\\Http\\User'); $application = $container->addDefinition('application')->setClass('Nette\\Application\\Application')->addSetup('$catchExceptions', '%productionMode%'); if (empty($config['productionMode'])) { $application->addSetup('Nette\\Application\\Diagnostics\\RoutingPanel::initialize'); } $container->addDefinition('router')->setClass('Nette\\Application\\Routers\\RouteList'); $container->addDefinition('presenterFactory')->setClass('Nette\\Application\\PresenterFactory', array(isset($container->parameters['appDir']) ? $container->parameters['appDir'] : NULL)); if (empty($config['mailer']['smtp'])) { $container->addDefinition('mailer')->setClass('Nette\\Mail\\SendmailMailer'); } else { Validators::assertField($config, 'mailer', 'array'); $container->addDefinition('mailer')->setClass('Nette\\Mail\\SmtpMailer', array($config['mailer'])); } }
/** * @param ContainerBuilder $container * @param array $config */ private function loadSecuritySection(ContainerBuilder $container, $config) { $container->addDefinition($this->prefix('security.hashCalculator'))->setClass('Drahak\\Restful\\Security\\HashCalculator')->addSetup('$service->setPrivateKey(?)', array($config['security']['privateKey'])); $container->addDefinition($this->prefix('security.hashAuthenticator'))->setClass('Drahak\\Restful\\Security\\Authentication\\HashAuthenticator')->setArguments(array($config['security']['privateKey'])); $container->addDefinition($this->prefix('security.timeoutAuthenticator'))->setClass('Drahak\\Restful\\Security\\Authentication\\TimeoutAuthenticator')->setArguments(array($config['security']['requestTimeKey'], $config['security']['requestTimeout'])); $container->addDefinition($this->prefix('security.nullAuthentication'))->setClass('Drahak\\Restful\\Security\\Process\\NullAuthentication'); $container->addDefinition($this->prefix('security.securedAuthentication'))->setClass('Drahak\\Restful\\Security\\Process\\SecuredAuthentication'); $container->addDefinition($this->prefix('security.basicAuthentication'))->setClass('Drahak\\Restful\\Security\\Process\\BasicAuthentication'); $container->addDefinition($this->prefix('security.authentication'))->setClass('Drahak\\Restful\\Security\\AuthenticationContext')->addSetup('$service->setAuthProcess(?)', array($this->prefix('@security.nullAuthentication'))); // enable OAuth2 in Restful if ($this->getByType($container, 'Drahak\\OAuth2\\KeyGenerator')) { $container->addDefinition($this->prefix('security.oauth2Authentication'))->setClass('Drahak\\Restful\\Security\\Process\\OAuth2Authentication'); } }
private function setupLatte(ContainerBuilder $container, array $config) { $this->validate($config, $this->defaults['latte'], 'nette.latte'); $latteFactory = $container->addDefinition($this->prefix('latteFactory'))->setClass('Latte\\Engine')->addSetup('setTempDirectory', array($container->expand('%tempDir%/cache/latte')))->addSetup('setAutoRefresh', array($container->parameters['debugMode']))->addSetup('setContentType', array($config['xhtml'] ? Latte\Compiler::CONTENT_XHTML : Latte\Compiler::CONTENT_HTML))->setImplement('Nette\\Bridges\\Framework\\ILatteFactory'); $container->addDefinition($this->prefix('templateFactory'))->setClass('Nette\\Bridges\\ApplicationLatte\\TemplateFactory'); $container->addDefinition($this->prefix('latte'))->setClass('Latte\\Engine')->addSetup('::trigger_error', array('Service nette.template is deprecated.', E_USER_DEPRECATED))->addSetup('setTempDirectory', array($container->expand('%tempDir%/cache/latte')))->addSetup('setAutoRefresh', array($container->parameters['debugMode']))->addSetup('setContentType', array($config['xhtml'] ? Latte\Compiler::CONTENT_XHTML : Latte\Compiler::CONTENT_HTML))->setAutowired(FALSE); $container->addDefinition($this->prefix('template'))->setClass('Nette\\Templating\\FileTemplate')->addSetup('::trigger_error', array('Service nette.template is deprecated.', E_USER_DEPRECATED))->addSetup('registerFilter', array(new Nette\DI\Statement(array($latteFactory, 'create'))))->addSetup('registerHelperLoader', array('Nette\\Templating\\Helpers::loader'))->setAutowired(FALSE); }
private function addWebLoader(ContainerBuilder $builder, $name, $config) { $filesServiceName = $this->prefix($name . 'Files'); $files = $builder->addDefinition($filesServiceName)->setClass('WebLoader\\FileCollection')->setArguments(array($config['sourceDir'])); foreach ($config['files'] as $file) { // finder support if (is_array($file) && isset($file['files']) && (isset($file['in']) || isset($file['from']))) { $finder = Finder::findFiles($file['files']); if (isset($file['exclude'])) { $finder->exclude($file['exclude']); } if (isset($file['in'])) { $finder->in(is_dir($file['in']) ? $file['in'] : $config['sourceDir'] . DIRECTORY_SEPARATOR . $file['in']); } else { $finder->from(is_dir($file['from']) ? $file['from'] : $config['sourceDir'] . DIRECTORY_SEPARATOR . $file['from']); } $foundFilesList = array(); foreach ($finder as $foundFile) { /** @var \SplFileInfo $foundFile */ $foundFilesList[] = $foundFile->getPathname(); } natsort($foundFilesList); foreach ($foundFilesList as $foundFilePathname) { $files->addSetup('addFile', array($foundFilePathname)); } } else { $this->checkFileExists($file, $config['sourceDir']); $files->addSetup('addFile', array($file)); } } foreach ($config['watchFiles'] as $file) { // finder support if (is_array($file) && isset($file['files']) && (isset($file['in']) || isset($file['from']))) { $finder = Finder::findFiles($file['files']); if (isset($file['exclude'])) { $finder->exclude($file['exclude']); } if (isset($file['in'])) { $finder->in(is_dir($file['in']) ? $file['in'] : $config['sourceDir'] . DIRECTORY_SEPARATOR . $file['in']); } else { $finder->from(is_dir($file['from']) ? $file['from'] : $config['sourceDir'] . DIRECTORY_SEPARATOR . $file['from']); } foreach ($finder as $foundFile) { /** @var \SplFileInfo $foundFile */ $files->addSetup('addWatchFile', array($foundFile->getPathname())); } } else { $this->checkFileExists($file, $config['sourceDir']); $files->addSetup('addWatchFile', array($file)); } } $files->addSetup('addRemoteFiles', array($config['remoteFiles'])); $compiler = $builder->addDefinition($this->prefix($name . 'Compiler'))->setClass('WebLoader\\Compiler')->setArguments(array('@' . $filesServiceName, $config['namingConvention'], $config['tempDir'])); $compiler->addSetup('setJoinFiles', array($config['joinFiles'])); foreach ($config['filters'] as $filter) { $compiler->addSetup('addFilter', array($filter)); } foreach ($config['fileFilters'] as $filter) { $compiler->addSetup('addFileFilter', array($filter)); } if (isset($config['debug']) && $config['debug']) { $compiler->addSetup('enableDebugging'); } // todo css media }
/** * Parses section 'services' from (unexpanded) configuration file. * @return void */ public static function parseServices(ContainerBuilder $builder, array $config, string $namespace = NULL) { $services = isset($config['services']) ? $config['services'] : []; $depths = []; foreach ($services as $name => $def) { $path = []; while (Config\Helpers::isInheriting($def)) { $path[] = $def; $def = isset($services[$def[Config\Helpers::EXTENDS_KEY]]) ? $services[$def[Config\Helpers::EXTENDS_KEY]] : []; if (in_array($def, $path, TRUE)) { throw new ServiceCreationException("Circular reference detected for service '{$name}'."); } } $depths[$name] = count($path); } array_multisort($depths, $services); foreach ($services as $name => $def) { if ((string) (int) $name === (string) $name) { $postfix = $def instanceof Statement && is_string($def->getEntity()) ? '.' . $def->getEntity() : (is_scalar($def) ? ".{$def}" : ''); $name = count($builder->getDefinitions()) + 1 . preg_replace('#\\W+#', '_', $postfix); } elseif ($namespace) { $name = $namespace . '.' . $name; } $params = $builder->parameters; if (is_array($def) && isset($def['parameters'])) { foreach ((array) $def['parameters'] as $k => $v) { $v = explode(' ', is_int($k) ? $v : $k); $params[end($v)] = $builder::literal('$' . end($v)); } } $def = Helpers::expand($def, $params); if (($parent = Config\Helpers::takeParent($def)) && $parent !== $name) { $builder->removeDefinition($name); $definition = $builder->addDefinition($name, $parent === Config\Helpers::OVERWRITE ? NULL : unserialize(serialize($builder->getDefinition($parent)))); } elseif ($builder->hasDefinition($name)) { $definition = $builder->getDefinition($name); } else { $definition = $builder->addDefinition($name); } try { static::parseService($definition, $def); } catch (\Exception $e) { throw new ServiceCreationException("Service '{$name}': " . $e->getMessage(), 0, $e); } } }
private function setupLatte(ContainerBuilder $container, array $config) { $this->validate($config, $this->defaults['latte'], 'nette.latte'); $latteFactory = $container->addDefinition($this->prefix('latteFactory'))->setClass('Latte\\Engine')->addSetup('setTempDirectory', array($container->expand('%tempDir%/cache/latte')))->addSetup('setAutoRefresh', array($container->parameters['debugMode']))->addSetup('setContentType', array($config['xhtml'] ? Latte\Compiler::CONTENT_XHTML : Latte\Compiler::CONTENT_HTML))->setImplement('Nette\\Bridges\\ApplicationLatte\\ILatteFactory'); $container->addDefinition($this->prefix('templateFactory'))->setClass('Nette\\Bridges\\ApplicationLatte\\TemplateFactory'); $latte = $container->addDefinition($this->prefix('latte'))->setClass('Latte\\Engine')->addSetup('setTempDirectory', array($container->expand('%tempDir%/cache/latte')))->addSetup('setAutoRefresh', array($container->parameters['debugMode']))->addSetup('setContentType', array($config['xhtml'] ? Latte\Compiler::CONTENT_XHTML : Latte\Compiler::CONTENT_HTML))->setAutowired(FALSE); foreach ($config['macros'] as $macro) { if (strpos($macro, '::') === FALSE && class_exists($macro)) { $macro .= '::install'; } else { Validators::assert($macro, 'callable'); } $latte->addSetup('?->onCompile[] = function($engine) { ' . $macro . '($engine->getCompiler()); }', array('@self')); $latteFactory->addSetup('?->onCompile[] = function($engine) { ' . $macro . '($engine->getCompiler()); }', array('@self')); } if (class_exists('Nette\\Templating\\FileTemplate')) { $container->addDefinition($this->prefix('template'))->setClass('Nette\\Templating\\FileTemplate')->addSetup('registerFilter', array(new Nette\DI\Statement(array($latteFactory, 'create'))))->addSetup('registerHelperLoader', array('Nette\\Templating\\Helpers::loader'))->setAutowired(FALSE); } }
public function setupSystem(ContainerBuilder $container, array $config) { $container->addDefinition($this->prefix('formRenderer'))->setClass('Venne\\System\\Forms\\Bootstrap3Renderer'); $container->addDefinition($this->prefix('admin.basicFormFactory'))->setClass('Nette\\Application\\UI\\Form')->setArguments(array(null, null))->setImplement('Venne\\Forms\\IFormFactory')->addSetup('setRenderer', array(new Statement($this->prefix('@formRenderer'))))->addSetup('setTranslator', array(new Statement('@Nette\\Localization\\ITranslator')))->setAutowired(false); $container->addDefinition($this->prefix('admin.ajaxFormFactory'))->setClass('Nette\\Application\\UI\\Form')->setArguments(array(null, null))->setImplement('Venne\\Forms\\IFormFactory')->addSetup('setRenderer', array(new Statement($this->prefix('@formRenderer'))))->addSetup('setTranslator', array(new Statement('@Nette\\Localization\\ITranslator')))->addSetup('$service->getElementPrototype()->class[] = ?', array('ajax'))->setAutowired(false); $container->addDefinition($this->prefix('admin.configFormFactory'))->setClass('Venne\\System\\UI\\ConfigFormFactory', array(new PhpLiteral('$configFile'), new PhpLiteral('$section')))->addSetup('setFormFactory', array(new Statement('@system.admin.basicFormFactory')))->setAutowired(false)->setParameters(array('configFile', 'section')); $container->addDefinition($this->prefix('registrationControlFactory'))->setClass('Venne\\Security\\Registration\\RegistrationControl', array(new PhpLiteral('$invitations'), new PhpLiteral('$userType'), new PhpLiteral('$mode'), new PhpLiteral('$loginProviderMode'), new PhpLiteral('$roles')))->setImplement('Venne\\Security\\Registration\\IRegistrationControlFactory')->setInject(true); $container->addDefinition($this->prefix('system.loginFormFactory'))->setClass('Venne\\System\\AdminModule\\LoginFormFactory', array(new Statement('@system.admin.basicFormFactory'))); $container->addDefinition($this->prefix('system.dashboardPresenter'))->setClass('Venne\\System\\AdminModule\\DashboardPresenter'); $container->addDefinition($this->prefix('cssControlFactory'))->setClass('Venne\\System\\Components\\CssControl')->setImplement('Venne\\System\\Components\\CssControlFactory')->setArguments(array(null))->setInject(true); $container->addDefinition($this->prefix('jsControlFactory'))->setClass('Venne\\System\\Components\\JsControl')->setImplement('Venne\\System\\Components\\JsControlFactory')->setArguments(array(null))->setInject(true); $container->addDefinition($this->prefix('navbarControlFactory'))->setImplement('Venne\\System\\Components\\INavbarControlFactory')->setArguments(array(null))->setInject(true); $container->addDefinition($this->prefix('loginControlFactory'))->setImplement('Venne\\Security\\Login\\ILoginControlFactory')->setInject(true); $container->addDefinition($this->prefix('gridoFactory'))->setImplement('Venne\\System\\Components\\IGridoFactory')->setArguments(array(null, null))->setInject(true); $container->addDefinition($this->prefix('gridControlFactory'))->setImplement('Venne\\System\\Components\\AdminGrid\\IAdminGridFactory')->setArguments(array(new PhpLiteral('$repository')))->setParameters(array('repository'))->setInject(true); $container->addDefinition($this->prefix('flashMessageControlFactory'))->setImplement('Venne\\System\\Components\\IFlashMessageControlFactory')->setArguments(array(null))->setInject(true)->addTag(WidgetsExtension::TAG_WIDGET, 'flashMessage'); }
/** * Parses section 'services' from (unexpanded) configuration file. * @return void */ public static function parseServices(ContainerBuilder $builder, array $config, $namespace = NULL) { if (!empty($config['factories'])) { throw new Nette\DeprecatedException("Section 'factories' is deprecated, move definitions to section 'services' and append key 'autowired: no'."); } $services = isset($config['services']) ? $config['services'] : array(); $depths = array(); foreach ($services as $name => $def) { $path = array(); while (Config\Helpers::isInheriting($def)) { $path[] = $def; $def = isset($services[$def[Config\Helpers::EXTENDS_KEY]]) ? $services[$def[Config\Helpers::EXTENDS_KEY]] : array(); if (in_array($def, $path, TRUE)) { throw new ServiceCreationException("Circular reference detected for service '{$name}'."); } } $depths[$name] = count($path); } array_multisort($depths, $services); foreach ($services as $origName => $def) { if ((string) (int) $origName === (string) $origName) { $postfix = $def instanceof Statement && is_string($def->getEntity()) ? '.' . $def->getEntity() : (is_scalar($def) ? ".{$def}" : ''); $name = count($builder->getDefinitions()) + 1 . preg_replace('#\\W+#', '_', $postfix); } else { $name = ($namespace ? $namespace . '.' : '') . strtr($origName, '\\', '_'); } $params = $builder->parameters; if (is_array($def) && isset($def['parameters'])) { foreach ((array) $def['parameters'] as $k => $v) { $v = explode(' ', is_int($k) ? $v : $k); $params[end($v)] = $builder::literal('$' . end($v)); } } $def = Helpers::expand($def, $params); if (($parent = Config\Helpers::takeParent($def)) && $parent !== $name) { $builder->removeDefinition($name); $definition = $builder->addDefinition($name, $parent === Config\Helpers::OVERWRITE ? NULL : unserialize(serialize($builder->getDefinition($parent)))); } elseif ($builder->hasDefinition($name)) { $definition = $builder->getDefinition($name); } else { $definition = $builder->addDefinition($name); } try { static::parseService($definition, $def); } catch (\Exception $e) { throw new ServiceCreationException("Service '{$name}': " . $e->getMessage(), NULL, $e); } if ($definition->getClass() === 'self' || $definition->getFactory() && $definition->getFactory()->getEntity() === 'self') { throw new Nette\DeprecatedException("Replace service definition '{$origName}: self' with '- {$origName}'."); } } }
public function setupSecurity(ContainerBuilder $container) { $container->addDefinition($this->prefix('defaultPresenter'))->setClass('Venne\\Security\\AdminModule\\DefaultPresenter')->addTag(SystemExtension::TAG_ADMINISTRATION, array('link' => 'Admin:Security:Default:', 'category' => 'System', 'name' => 'Security', 'description' => 'Manage users, roles and permissions', 'priority' => 60)); $container->addDefinition($this->prefix('accountPresenter'))->setClass('Venne\\Security\\AdminModule\\AccountPresenter'); }
private function initMedia(ContainerBuilder $builder) { $builder->addDefinition($this->prefix('media'))->setClass('movi\\Media\\Media', ['storage', '%wwwDir%']); $builder->addDefinition('thumbnailer')->setClass('movi\\Media\\Utils\\Thumbnailer'); $builder->addDefinition('linker')->setClass('movi\\Media\\Utils\\Linker'); }
protected function createRepositoryService($repositoryName, $repositoryClass, ContainerBuilder $builder, $mapperName) { $repositoryName = $this->prefix('repositories.' . $repositoryName); if (!$builder->hasDefinition($repositoryName)) { $builder->addDefinition($repositoryName)->setClass($repositoryClass)->setArguments(['@' . $mapperName, '@' . $this->prefix('dependencyProvider')])->addSetup('setModel', ['@' . $this->prefix('model')]); } }
private function getCache($prefix, ContainerBuilder $builder) { if (strlen($builder->getByType('Doctrine\\Common\\Cache\\Cache')) > 0) { return '@' . $builder->getByType('Doctrine\\Common\\Cache\\Cache'); } else { $builder->addDefinition($prefix . ".cache")->setClass(self::DOCTRINE_DEFAULT_CACHE); return '@' . $prefix . ".cache"; } }