Nette\DI\Helpers::prefixServiceName PHP Метод

prefixServiceName() публичный статический Метод

Replaces @extension with real extension name in service definition.
public static prefixServiceName ( $config, $namespace ) : mixed
Результат mixed
    public static function prefixServiceName($config, $namespace)
    {
        if (is_string($config)) {
            if (strncmp($config, '@extension.', 10) === 0) {
                $config = '@' . $namespace . '.' . substr($config, 11);
            }
        } elseif ($config instanceof Statement) {
            return new Statement(self::prefixServiceName($config->getEntity(), $namespace), self::prefixServiceName($config->arguments, $namespace));
        } elseif (is_array($config)) {
            foreach ($config as &$val) {
                $val = self::prefixServiceName($val, $namespace);
            }
        }
        return $config;
    }

Usage Example

Пример #1
0
 /**
  * Adds service definitions from configuration.
  * @return void
  */
 public static function loadDefinitions(ContainerBuilder $builder, array $services, $namespace = NULL)
 {
     $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;
         }
         if ($def === FALSE) {
             $builder->removeDefinition($name);
             continue;
         }
         if ($namespace) {
             $def = Helpers::prefixServiceName($def, $namespace);
         }
         $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) {
             trigger_error("Section inheritance {$name} < {$parent} is deprecated.", E_USER_DEPRECATED);
             $builder->removeDefinition($name);
             $definition = $builder->addDefinition($name, $parent === Config\Helpers::OVERWRITE ? NULL : clone $builder->getDefinition($parent));
         } elseif ($builder->hasDefinition($name)) {
             $definition = $builder->getDefinition($name);
         } else {
             $definition = $builder->addDefinition($name);
         }
         try {
             static::loadDefinition($definition, $def);
         } catch (\Exception $e) {
             throw new ServiceCreationException("Service '{$name}': " . $e->getMessage(), 0, $e);
         }
     }
 }