/** * Parses single service from configuration file. * @return void */ public static function parseService(NDIServiceDefinition $definition, $config, $shared = TRUE) { if ($config === NULL) { return; } elseif (!is_array($config)) { $config = array('class' => NULL, 'factory' => $config); } $known = $shared ? array('class', 'factory', 'arguments', 'setup', 'autowired', 'run', 'tags') : array('class', 'factory', 'arguments', 'setup', 'autowired', 'tags', 'internal', 'parameters'); if ($error = array_diff(array_keys($config), $known)) { throw new InvalidStateException("Unknown key '" . implode("', '", $error) . "' in definition of service."); } $arguments = array(); if (array_key_exists('arguments', $config)) { NValidators::assertField($config, 'arguments', 'array'); $arguments = self::filterArguments($config['arguments']); $definition->setArguments($arguments); } if (array_key_exists('class', $config) || array_key_exists('factory', $config)) { $definition->class = NULL; $definition->factory = NULL; } if (array_key_exists('class', $config)) { NValidators::assertField($config, 'class', 'string|stdClass|null'); if ($config['class'] instanceof stdClass) { $definition->setClass($config['class']->value, self::filterArguments($config['class']->attributes)); } else { $definition->setClass($config['class'], $arguments); } } if (array_key_exists('factory', $config)) { NValidators::assertField($config, 'factory', 'callable|stdClass|null'); if ($config['factory'] instanceof stdClass) { $definition->setFactory($config['factory']->value, self::filterArguments($config['factory']->attributes)); } else { $definition->setFactory($config['factory'], $arguments); } } if (isset($config['setup'])) { if (NConfigHelpers::takeParent($config['setup'])) { $definition->setup = array(); } NValidators::assertField($config, 'setup', 'list'); foreach ($config['setup'] as $id => $setup) { NValidators::assert($setup, 'callable|stdClass', "setup item #$id"); if ($setup instanceof stdClass) { NValidators::assert($setup->value, 'callable', "setup item #$id"); $definition->addSetup($setup->value, self::filterArguments($setup->attributes)); } else { $definition->addSetup($setup); } } } $definition->setShared($shared); if (isset($config['parameters'])) { NValidators::assertField($config, 'parameters', 'array'); $definition->setParameters($config['parameters']); } if (isset($config['autowired'])) { NValidators::assertField($config, 'autowired', 'bool'); $definition->setAutowired($config['autowired']); } if (isset($config['internal'])) { NValidators::assertField($config, 'internal', 'bool'); $definition->setInternal($config['internal']); } if (isset($config['run'])) { $config['tags']['run'] = (bool) $config['run']; } if (isset($config['tags'])) { NValidators::assertField($config, 'tags', 'array'); if (NConfigHelpers::takeParent($config['tags'])) { $definition->tags = array(); } foreach ($config['tags'] as $tag => $attrs) { if (is_int($tag) && is_string($attrs)) { $definition->addTag($attrs); } else { $definition->addTag($tag, $attrs); } } } }
private function getSection(array $data, $key, $file) { NValidators::assertField($data, $key, 'array|null', "section '%' in file '$file'"); $item = $data[$key]; if ($parent = NConfigHelpers::takeParent($item)) { $item = NConfigHelpers::merge($item, $this->getSection($data, $parent, $file)); } return $item; }
public function loadConfiguration() { $container = $this->getContainerBuilder(); $config = $this->getConfig(); // cache $container->addDefinition('cacheJournal') ->setClass('NFileJournal', array('%tempDir%')); $container->addDefinition('cacheStorage') ->setClass('NFileStorage', array('%tempDir%/cache')); $container->addDefinition('templateCacheStorage') ->setClass('NPhpFileStorage', array('%tempDir%/cache')) ->setAutowired(FALSE); // http $container->addDefinition('httpRequestFactory') ->setClass('NHttpRequestFactory') ->addSetup('setEncoding', array('UTF-8')) ->setInternal(TRUE) ->setShared(FALSE); $container->addDefinition('httpRequest') ->setClass('NHttpRequest') ->setFactory('@\NHttpRequestFactory::createHttpRequest'); $container->addDefinition('httpResponse') ->setClass('NHttpResponse'); $container->addDefinition('httpContext') ->setClass('NHttpContext'); $session = $container->addDefinition('session') ->setClass('NSession'); if (isset($config['session']['expiration'])) { $session->addSetup('setExpiration', array($config['session']['expiration'])); unset($config['session']['expiration']); } if (!empty($config['session'])) { NValidators::assertField($config, 'session', 'array'); $session->addSetup('setOptions', array($config['session'])); } $container->addDefinition('user') ->setClass('NUser'); // application $application = $container->addDefinition('application') ->setClass('NApplication') ->addSetup('$catchExceptions', '%productionMode%'); if (empty($config['productionMode'])) { $application->addSetup('NRoutingDebugger::initialize'); // enable routing debugger } $container->addDefinition('router') ->setClass('NRouteList'); $container->addDefinition('presenterFactory') ->setClass('NPresenterFactory', array( isset($container->parameters['appDir']) ? $container->parameters['appDir'] : NULL )); // mailer if (empty($config['mailer']['smtp'])) { $container->addDefinition('mailer') ->setClass('NSendmailMailer'); } else { NValidators::assertField($config, 'mailer', 'array'); $container->addDefinition('mailer') ->setClass('NSmtpMailer', array($config['mailer'])); } }