/** * @param ServiceDefinition $def */ private function registerToLatte(ServiceDefinition $def) { $def->addSetup('?->onCompile[] = function (Latte\\Engine $engine) { (new Texy\\Bridges\\Latte\\TexyMacro($engine, ?))->install(); }', ['@self', $this->prefix('@texy')])->addSetup('addFilter', ['texy', [$this->prefix('@texy'), 'process']]); if (method_exists('Latte\\Engine', 'addProvider')) { $def->addSetup('addProvider', ['texy', $this->prefix('@texy')]); } else { $def->addSetup('?->addFilter(\'getTexy\', function () { return ?;})', ['@self', $this->prefix('@texy')]); } }
/** * @param \Nette\DI\ServiceDefinition $configuration * @param string $namespace * @param array $config */ private function applyNamespaceConfiguration(ServiceDefinition $configuration, $namespace, array $config) { $builder = $this->getContainerBuilder(); $safeNamespace = str_replace('-', '_', Strings::webalize($namespace)); if ($namespace === Configuration::DEFAULT_NAMESPACE_NAME || $config['nameResolver']['class']) { if (!class_exists($config['nameResolver']['class'])) { throw new ConfigurationException('Name resolver ' . $config['nameResolver']['class'] . ' for namespace ' . $namespace . ' does not exists.'); } $nameResolver = $builder->addDefinition($this->prefix('nameResolver.' . $safeNamespace))->setClass($config['nameResolver']['class']); $configuration->addSetup('setNameResolver', [$namespace, $nameResolver]); } if ($config['default'] !== null) { $configuration->addSetup('setDefaultImage', [$namespace, $config['default']]); } if ($config['resizeFlag'] !== null) { $resizeFlag = Helpers::parseResizeFlags($config['resizeFlag']); $configuration->addSetup('setResizeFlag', [$namespace, $resizeFlag]); } if ($config['quality'] !== null) { $configuration->addSetup('setQuality', [$namespace, $config['quality']]); } if (isset($config['presets']) && count($config['presets'])) { foreach ($config['presets'] as $name => $preset) { if ($preset instanceof Statement) { $size = Helpers::parseSize($preset->getEntity()); $resizeFlags = Helpers::parseResizeFlags($preset->arguments); } else { $size = Helpers::parseSize($preset); $resizeFlags = null; } $configuration->addSetup('addPreset', [$namespace, $name, $size[0], $size[1], $resizeFlags]); } } if ($config['dummy']['enabled'] !== null) { $configuration->addSetup('enableDummy', [$namespace, $config['dummy']['enabled']]); } if ($config['dummy']['class'] !== null) { if (!class_exists($config['dummy']['class'])) { throw new ConfigurationException('Dummy provider class ' . $config['dummy']['class'] . ' for namespace ' . $namespace . ' does not exists.'); } $provider = $builder->addDefinition($this->prefix('dummy.' . $safeNamespace))->setClass($config['dummy']['class']); $configuration->addSetup('setDummyProvider', [$namespace, $provider]); } if ($config['dummy']['category'] !== null) { $configuration->addSetup('setDummyCategory', [$namespace, $config['dummy']['category']]); } if ($config['dummy']['fallbackSize'] !== null) { $size = $config['dummy']['fallbackSize']; $configuration->addSetup('setDummyFallbackSize', [$namespace, $size[0], $size[1]]); } if ($config['dummy']['chance'] !== null) { $configuration->addSetup('setDummyDisplayChance', [$namespace, $config['dummy']['chance']]); } }
private function configureEndpoints($config, ServiceDefinition $solarium) { if (empty($config['endpoints'])) { $endpoints = ['default' => array_intersect_key($config, $this->endpointDefaults)]; } else { $endpoints = $config['endpoints']; } $solarium->addSetup('clearEndpoints'); $default = TRUE; foreach ($endpoints as $name => $options) { $options += $this->endpointDefaults; $options += ['key' => $name]; $solarium->addSetup('addEndpoint', [array_diff_key($options, ['default' => TRUE])]); if ($default === TRUE && $options['default'] === NULL || $options['default'] === TRUE) { $solarium->addSetup('setDefaultEndpoint', [$name]); } } }
private function registerExtension($extension) { $builder = $this->containerBuilder; // Statement if ($extension instanceof Statement) { $class = $extension->getEntity(); } elseif (is_string($extension) && Strings::startsWith($extension, '@')) { $class = $builder->getDefinition($builder->getServiceName($extension))->getClass(); } elseif (is_string($extension)) { $class = $extension; $extension = new Statement($extension); } else { throw new UnexpectedTypeException("Extension has to be string or Statement, given " . (is_object($extension) ? get_class($extension) : gettype($extension)) . "."); } if (!class_exists($class)) { throw new InvalidArgumentException("Form extension class {$class} not found."); } $reflection = new ClassType($class); $matched = FALSE; if ($reflection->implementsInterface('NForms\\Builder\\Components\\IBeforeCreateContainer')) { $this->beforeCreateContainerOpSet->addSetup('add', array($extension)); $matched = TRUE; } if ($reflection->implementsInterface('NForms\\Builder\\Components\\IContainerFactory')) { $this->containerFactories->addSetup('add', array($extension)); $matched = TRUE; } if ($reflection->implementsInterface('NForms\\Builder\\Components\\IAfterCreateContainer')) { $this->afterCreateContainerOpSet->addSetup('add', array($extension)); $matched = TRUE; } if ($reflection->implementsInterface('NForms\\Builder\\Components\\IBeforeCreateControl')) { $this->beforeCreateControlOpSet->addSetup('add', array($extension)); $matched = TRUE; } if ($reflection->implementsInterface('NForms\\Builder\\Components\\IControlFactory')) { $this->controlFactories->addSetup('add', array($extension)); $matched = TRUE; } if ($reflection->implementsInterface('NForms\\Builder\\Components\\IAfterCreateControl')) { $this->afterCreateControlOpSet->addSetup('add', array($extension)); $matched = TRUE; } if ($reflection->implementsInterface('NForms\\Mapping\\IControlMapper')) { $this->controlMapperSet->addSetup('add', array($extension)); $matched = TRUE; } if (!$matched) { throw new UnexpectedTypeException("Extension does not implement any of the expected interface. Given: '" . get_class($extension) . "'." . "Expected interfaces: IBeforeCreateContainer, IContainerFactory, IAfterCreateContainer, IBeforeCreateControl, IControlFactory, IAfterCreateControl, IControlMapper."); } return $this; }
public function process(ServiceDefinition $definition, $methods) { $currentSetupMethods = array_map(function (Statement $statement) { return $statement->getEntity(); }, $definition->getSetup()); Validators::assert($methods, 'array'); foreach ($methods as $setup) { $method = $setup; $args = array(); if ($method instanceof Statement) { $args = $method->arguments; $method = $method->getEntity(); } if (!in_array($method, $currentSetupMethods)) { $definition->addSetup($method, $args); } } }
/** * Parses single service from configuration file. * @return void */ public static function parseService(ServiceDefinition $definition, $config) { if ($config === NULL) { return; } elseif (is_string($config) && interface_exists($config)) { $config = ['class' => NULL, 'implement' => $config]; } elseif ($config instanceof Statement && is_string($config->getEntity()) && interface_exists($config->getEntity())) { $config = ['class' => NULL, 'implement' => $config->getEntity(), 'factory' => array_shift($config->arguments)]; } elseif (!is_array($config) || isset($config[0], $config[1])) { $config = ['class' => NULL, 'create' => $config]; } if (array_key_exists('factory', $config)) { $config['create'] = $config['factory']; unset($config['factory']); } $known = ['class', 'create', 'arguments', 'setup', 'autowired', 'dynamic', 'inject', 'parameters', 'implement', 'run', 'tags']; if ($error = array_diff(array_keys($config), $known)) { throw new Nette\InvalidStateException(sprintf("Unknown or deprecated key '%s' in definition of service.", implode("', '", $error))); } $config = Helpers::filterArguments($config); $arguments = []; if (array_key_exists('arguments', $config)) { Validators::assertField($config, 'arguments', 'array'); $arguments = $config['arguments']; $definition->setArguments($arguments); } if (array_key_exists('class', $config) || array_key_exists('create', $config)) { $definition->setClass(NULL); $definition->setFactory(NULL); } if (array_key_exists('class', $config)) { Validators::assertField($config, 'class', 'string|Nette\\DI\\Statement|null'); if (!$config['class'] instanceof Statement) { $definition->setClass($config['class']); } $definition->setFactory($config['class'], $arguments); } if (array_key_exists('create', $config)) { Validators::assertField($config, 'create', 'callable|Nette\\DI\\Statement|null'); $definition->setFactory($config['create'], $arguments); } if (isset($config['setup'])) { if (Config\Helpers::takeParent($config['setup'])) { $definition->setSetup([]); } Validators::assertField($config, 'setup', 'list'); foreach ($config['setup'] as $id => $setup) { Validators::assert($setup, 'callable|Nette\\DI\\Statement', "setup item #{$id}"); $definition->addSetup($setup); } } if (isset($config['parameters'])) { Validators::assertField($config, 'parameters', 'array'); $definition->setParameters($config['parameters']); } if (isset($config['implement'])) { Validators::assertField($config, 'implement', 'string'); $definition->setImplement($config['implement']); $definition->setAutowired(TRUE); } if (isset($config['autowired'])) { Validators::assertField($config, 'autowired', 'bool'); $definition->setAutowired($config['autowired']); } if (isset($config['dynamic'])) { Validators::assertField($config, 'dynamic', 'bool'); $definition->setDynamic($config['dynamic']); } if (isset($config['inject'])) { Validators::assertField($config, 'inject', 'bool'); $definition->addTag(Extensions\InjectExtension::TAG_INJECT, $config['inject']); } if (isset($config['run'])) { $config['tags']['run'] = (bool) $config['run']; } if (isset($config['tags'])) { Validators::assertField($config, 'tags', 'array'); if (Config\Helpers::takeParent($config['tags'])) { $definition->setTags([]); } foreach ($config['tags'] as $tag => $attrs) { if (is_int($tag) && is_string($attrs)) { $definition->addTag($attrs); } else { $definition->addTag($tag, $attrs); } } } }
/** * Parses single service from configuration file. * @return void */ public static function parseService(Nette\DI\ServiceDefinition $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 Nette\InvalidStateException("Unknown key '" . implode("', '", $error) . "' in definition of service."); } $arguments = array(); if (array_key_exists('arguments', $config)) { Validators::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)) { Validators::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)) { Validators::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 (Helpers::takeParent($config['setup'])) { $definition->setup = array(); } Validators::assertField($config, 'setup', 'list'); foreach ($config['setup'] as $id => $setup) { Validators::assert($setup, 'callable|stdClass', "setup item #{$id}"); if ($setup instanceof \stdClass) { Validators::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'])) { Validators::assertField($config, 'parameters', 'array'); $definition->setParameters($config['parameters']); } if (isset($config['autowired'])) { Validators::assertField($config, 'autowired', 'bool'); $definition->setAutowired($config['autowired']); } if (isset($config['internal'])) { Validators::assertField($config, 'internal', 'bool'); $definition->setInternal($config['internal']); } if (isset($config['run'])) { $config['tags']['run'] = (bool) $config['run']; } if (isset($config['tags'])) { Validators::assertField($config, 'tags', 'array'); if (Helpers::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); } } } }
/** * @param \Nette\DI\ServiceDefinition $metadataDriver * @param string $namespace * @param string|object $driver * @param string $prefix * @throws \Nette\Utils\AssertionException * @return string */ protected function processMetadataDriver(Nette\DI\ServiceDefinition $metadataDriver, $namespace, $driver, $prefix) { if (!is_string($namespace) || !Strings::match($namespace, '#^' . self::PHP_NAMESPACE . '\\z#')) { throw new Nette\Utils\AssertionException("The metadata namespace expects to be valid namespace, {$namespace} given."); } $namespace = ltrim($namespace, '\\'); if (is_string($driver) || is_array($driver)) { $paths = is_array($driver) ? $driver : array($driver); foreach ($paths as $path) { if (($pos = strrpos($path, '*')) !== FALSE) { $path = substr($path, 0, $pos); } if (!file_exists($path)) { throw new Nette\Utils\AssertionException("The metadata path expects to be an existing directory, {$path} given."); } } $driver = new Statement(self::ANNOTATION_DRIVER, is_array($paths) ? $paths : array($paths)); } $impl = $driver instanceof \stdClass ? $driver->value : ($driver instanceof Statement ? $driver->entity : (string) $driver); list($driver) = CacheHelpers::filterArgs($driver); /** @var Statement $driver */ if (isset($this->metadataDriverClasses[$impl])) { $driver->entity = $this->metadataDriverClasses[$impl]; } if (is_string($driver->entity) && substr($driver->entity, 0, 1) === '@') { $metadataDriver->addSetup('addDriver', array($driver->entity, $namespace)); return $driver->entity; } if ($impl === self::ANNOTATION_DRIVER) { $driver->arguments = array(Nette\Utils\Arrays::flatten($driver->arguments), 2 => $this->prefix('@cache.' . $prefix . '.metadata')); } $serviceName = $this->prefix($prefix . '.driver.' . str_replace('\\', '_', $namespace) . '.' . str_replace('\\', '_', $impl) . 'Impl'); $this->getContainerBuilder()->addDefinition($serviceName)->setClass('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver')->setFactory($driver->entity, $driver->arguments)->setAutowired(FALSE)->setInject(FALSE); $metadataDriver->addSetup('addDriver', array('@' . $serviceName, $namespace)); return '@' . $serviceName; }
/** * @param ServiceDefinition $definition * @param ClassType $class * @param array $methodMapping */ public function injectToDefinition(ServiceDefinition $definition, ClassType $class, array $methodMapping) { $injectionProperties = $this->getInjectionByNameProperties($class, $methodMapping); // Copy original setup method to be able to place them after injection $setupSave = $definition->setup; $definition->setup = []; foreach ($injectionProperties as $injectionProperty => $injectedServiceName) { $definition->addSetup($methodMapping[self::IIS_INJECT_SERVICE_METHOD], [$injectionProperty, '@' . $injectedServiceName]); } $injectionProperties = $this->getInjectionByTypeProperties($class, $methodMapping); foreach ($injectionProperties as $injectionProperty => $injectedServiceType) { $definition->addSetup($methodMapping[self::IIS_INJECT_SERVICE_METHOD], [$injectionProperty, '@' . $injectedServiceType]); } $definition->addSetup($methodMapping[self::IIS_INJECT_PARAMETERS_METHOD], ['@container']); $definition->addSetup($methodMapping[self::IIS_INJECTION_COMPLETED_METHOD], []); // Add original setup statements after injection completed method call foreach ($setupSave as $originalSetup) { $definition->addSetup($originalSetup); } }
/** * @param ServiceDefinition $filterManager * @param array $aliases * @throws \Mike227\NAssetic\Exceptions\UnexpectedValueException */ private static function setupFilters(ServiceDefinition $filterManager, array $aliases) { foreach ($aliases as $name => $filter) { if (is_object($filter)) { $statement = $filter instanceof Statement ? $filter : new Statement($filter->value, $filter->attributes); $filterManager->addSetup('set', array($name, $statement)); } else { if (class_exists($filter)) { $filterManager->addSetup('set', array($name, new Statement($filter))); } else { if (Strings::startsWith($filter, '@')) { $filterManager->addSetup('set', array($name, $filter)); } else { if (is_string($filter)) { throw new UnexpectedValueException("Filter \"{$name}: {$filter}\" class not found."); } else { throw new UnexpectedValueException("Invalid filter definition \"{$name}: {$filter}\"."); } } } } } }
/** * Configures BowerLoader instance. * @param ServiceDefinition * @return void */ private function setupService(ServiceDefinition $service) { // Bower components directory $service->addSetup('setBowerDir', array($this->getBowerDir())); // Setup autoloading $service->addSetup('setAutoload', array(isset($this->config['autoload']) ? $this->config['autoload'] : TRUE)); // Setup package files prepending $service->addSetup('setPrepend', array(isset($this->config['prepend']) ? $this->config['prepend'] : TRUE)); // Set cache storage $service->addSetup('setCacheStorage', array('@cacheStorage')); }
/** * Parses single service from configuration file. * @return void */ public static function parseService(ServiceDefinition $definition, $config) { if ($config === NULL) { return; } elseif (is_string($config) && interface_exists($config)) { $config = array('class' => NULL, 'implement' => $config); } elseif ($config instanceof \stdClass && interface_exists($config->value)) { $config = array('class' => NULL, 'implement' => $config->value, 'factory' => array_shift($config->attributes)); } elseif (!is_array($config)) { $config = array('class' => NULL, 'create' => $config); } if (array_key_exists('factory', $config)) { $config['create'] = $config['factory']; unset($config['factory']); }; $known = array('class', 'create', 'arguments', 'setup', 'autowired', 'inject', 'parameters', 'implement', 'run', 'tags'); if ($error = array_diff(array_keys($config), $known)) { throw new Nette\InvalidStateException(sprintf("Unknown or deprecated key '%s' in definition of service.", implode("', '", $error))); } $arguments = array(); if (array_key_exists('arguments', $config)) { Validators::assertField($config, 'arguments', 'array'); $arguments = self::filterArguments($config['arguments']); $definition->setArguments($arguments); } if (array_key_exists('class', $config) || array_key_exists('create', $config)) { $definition->class = NULL; $definition->factory = NULL; } if (array_key_exists('class', $config)) { Validators::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('create', $config)) { Validators::assertField($config, 'create', 'callable|stdClass|null'); if ($config['create'] instanceof \stdClass) { $definition->setFactory($config['create']->value, self::filterArguments($config['create']->attributes)); } else { $definition->setFactory($config['create'], $arguments); } } if (isset($config['setup'])) { if (Config\Helpers::takeParent($config['setup'])) { $definition->setup = array(); } Validators::assertField($config, 'setup', 'list'); foreach ($config['setup'] as $id => $setup) { Validators::assert($setup, 'callable|stdClass', "setup item #$id"); if ($setup instanceof \stdClass) { Validators::assert($setup->value, 'callable', "setup item #$id"); $definition->addSetup($setup->value, self::filterArguments($setup->attributes)); } else { $definition->addSetup($setup); } } } if (isset($config['parameters'])) { Validators::assertField($config, 'parameters', 'array'); $definition->setParameters($config['parameters']); } if (isset($config['implement'])) { Validators::assertField($config, 'implement', 'string'); $definition->setImplement($config['implement']); $definition->setAutowired(TRUE); } if (isset($config['autowired'])) { Validators::assertField($config, 'autowired', 'bool'); $definition->setAutowired($config['autowired']); } if (isset($config['inject'])) { Validators::assertField($config, 'inject', 'bool'); $definition->setInject($config['inject']); } if (isset($config['run'])) { $config['tags']['run'] = (bool) $config['run']; } if (isset($config['tags'])) { Validators::assertField($config, 'tags', 'array'); if (Config\Helpers::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); } } } }
protected function bindEventProperties(Nette\DI\ServiceDefinition $def, Nette\Reflection\ClassType $class) { foreach ($class->getProperties(Nette\Reflection\Property::IS_PUBLIC) as $property) { if (!preg_match('#^on[A-Z]#', $name = $property->getName())) { continue; } if ($property->hasAnnotation('persistent') || $property->hasAnnotation('inject')) { // definitely not an event continue; } $def->addSetup('$' . $name, array(new Nette\DI\Statement($this->prefix('@manager') . '::createEvent', array(array($class->getName(), $name), new Code\PhpLiteral('$service->' . $name))))); } }
protected function bindEventProperties(Nette\DI\ServiceDefinition $def, Nette\Reflection\ClassType $class) { foreach ($class->getProperties(Nette\Reflection\Property::IS_PUBLIC) as $property) { if (!preg_match('#^on[A-Z]#', $name = $property->getName())) { continue; } if ($property->hasAnnotation('persistent') || $property->hasAnnotation('inject')) { // definitely not an event continue; } $def->addSetup('$' . $name, [new Nette\DI\Statement($this->prefix('@manager') . '::createEvent', [[$class->getName(), $name], new Code\PhpLiteral('$service->' . $name), NULL, $property->hasAnnotation('globalDispatchFirst') ? (bool) $property->getAnnotation('globalDispatchFirst') : $this->loadedConfig['globalDispatchFirst']])]); } }
/** * Parses single service definition from configuration. * @return void */ public static function loadDefinition(ServiceDefinition $definition, $config) { if ($config === NULL) { return; } elseif (is_string($config) && interface_exists($config)) { $config = ['class' => NULL, 'implement' => $config]; } elseif ($config instanceof Statement && is_string($config->getEntity()) && interface_exists($config->getEntity())) { $config = ['class' => NULL, 'implement' => $config->getEntity(), 'factory' => array_shift($config->arguments)]; } elseif (!is_array($config) || isset($config[0], $config[1])) { $config = ['class' => NULL, 'factory' => $config]; } if (array_key_exists('create', $config)) { trigger_error("Key 'create' is deprecated, use 'factory' or 'class' in configuration.", E_USER_DEPRECATED); $config['factory'] = $config['create']; unset($config['create']); } $known = ['class', 'factory', 'arguments', 'setup', 'autowired', 'dynamic', 'inject', 'parameters', 'implement', 'run', 'tags']; if ($error = array_diff(array_keys($config), $known)) { $hints = array_filter(array_map(function ($error) use($known) { return Nette\Utils\ObjectMixin::getSuggestion($known, $error); }, $error)); $hint = $hints ? ", did you mean '" . implode("', '", $hints) . "'?" : '.'; throw new Nette\InvalidStateException(sprintf("Unknown key '%s' in definition of service{$hint}", implode("', '", $error))); } $config = Helpers::filterArguments($config); if (array_key_exists('class', $config) || array_key_exists('factory', $config)) { $definition->setClass(NULL); $definition->setFactory(NULL); } if (array_key_exists('class', $config)) { Validators::assertField($config, 'class', 'string|Nette\\DI\\Statement|null'); if (!$config['class'] instanceof Statement) { $definition->setClass($config['class']); } $definition->setFactory($config['class']); } if (array_key_exists('factory', $config)) { Validators::assertField($config, 'factory', 'callable|Nette\\DI\\Statement|null'); $definition->setFactory($config['factory']); } if (array_key_exists('arguments', $config)) { Validators::assertField($config, 'arguments', 'array'); $arguments = $config['arguments']; if (!Config\Helpers::takeParent($arguments) && !Nette\Utils\Arrays::isList($arguments) && $definition->getFactory()) { $arguments += $definition->getFactory()->arguments; } $definition->setArguments($arguments); } if (isset($config['setup'])) { if (Config\Helpers::takeParent($config['setup'])) { $definition->setSetup([]); } Validators::assertField($config, 'setup', 'list'); foreach ($config['setup'] as $id => $setup) { Validators::assert($setup, 'callable|Nette\\DI\\Statement|array:1', "setup item #{$id}"); if (is_array($setup)) { $setup = new Statement(key($setup), array_values($setup)); } $definition->addSetup($setup); } } if (isset($config['parameters'])) { Validators::assertField($config, 'parameters', 'array'); $definition->setParameters($config['parameters']); } if (isset($config['implement'])) { Validators::assertField($config, 'implement', 'string'); $definition->setImplement($config['implement']); $definition->setAutowired(TRUE); } if (isset($config['autowired'])) { Validators::assertField($config, 'autowired', 'bool|string|array'); $definition->setAutowired($config['autowired']); } if (isset($config['dynamic'])) { Validators::assertField($config, 'dynamic', 'bool'); $definition->setDynamic($config['dynamic']); } if (isset($config['inject'])) { Validators::assertField($config, 'inject', 'bool'); $definition->addTag(Extensions\InjectExtension::TAG_INJECT, $config['inject']); } if (isset($config['run'])) { trigger_error("Option 'run' is deprecated, use 'run' as tag.", E_USER_DEPRECATED); $config['tags']['run'] = (bool) $config['run']; } if (isset($config['tags'])) { Validators::assertField($config, 'tags', 'array'); if (Config\Helpers::takeParent($config['tags'])) { $definition->setTags([]); } foreach ($config['tags'] as $tag => $attrs) { if (is_int($tag) && is_string($attrs)) { $definition->addTag($attrs); } else { $definition->addTag($tag, $attrs); } } } }
/** * @param \Nette\DI\ServiceDefinition $def */ private function registerMacros(ServiceDefinition $def) { $def->addSetup('Ark8\\Security\\Latte\\AuthorizatorMacros::install(?->getCompiler())', ['@self']); }
/** * Registers new entity in mapper * @param ServiceDefinition * @param array [table => '', primaryKey => '', entity => '', repository => ''] * @return void */ protected function registerInMapper(ServiceDefinition $mapper, array $mapping = NULL) { if ($mapping === NULL) { return; } if (!isset($mapping['table']) || !is_string($mapping['table'])) { throw new \InvalidArgumentException('Table name missing or it\'s not string'); } if (!isset($mapping['entity']) || !is_string($mapping['entity'])) { throw new \InvalidArgumentException('Entity class missing or it\'s not string'); } $repositoryClass = isset($mapping['repository']) ? $mapping['repository'] : NULL; $primaryKey = isset($mapping['primaryKey']) ? $mapping['primaryKey'] : NULL; if (!is_string($repositoryClass) && !is_null($repositoryClass)) { throw new \InvalidArgumentException('Repository class must be string or NULL, ' . gettype($repositoryClass) . ' given'); } if (!is_string($primaryKey) && !is_null($primaryKey)) { throw new \InvalidArgumentException('Primary key must be string or NULL, ' . gettype($primaryKey) . ' given'); } $mapper->addSetup('register', array($mapping['table'], $mapping['entity'], $repositoryClass, $primaryKey)); }
private function decorateServiceDefinitionWithNetteEvent(ServiceDefinition $serviceDefinition, NetteEventItemInterface $netteEvent) { $propertyStatement = new Statement('function () { $class = ?; $event = new $class(...func_get_args()); ?->dispatch(?, $event); }', [$netteEvent->getEventClass(), '@' . EventDispatcherInterface::class, $netteEvent->getEventName()]); $serviceDefinition->addSetup('$service->?[] = ?;', [$netteEvent->getProperty(), $propertyStatement]); }