Replaces @extension with real extension name in service definition.
public static prefixServiceName ( $config, $namespace ) : mixed | ||
return | mixed |
/** * 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); } } }