You are here

public function Container::addScope in Service Container 7

Same name in this branch
  1. 7 lib/Drupal/Component/DependencyInjection/Container.php \Drupal\Component\DependencyInjection\Container::addScope()
  2. 7 modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Container.php \Symfony\Component\DependencyInjection\Container::addScope()
Same name and namespace in other branches
  1. 7.2 modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Container.php \Symfony\Component\DependencyInjection\Container::addScope()

Adds a scope to the container.

@api

Parameters

ScopeInterface $scope:

Throws

InvalidArgumentException

File

modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Container.php, line 496

Class

Container
Container is a dependency injection container.

Namespace

Symfony\Component\DependencyInjection

Code

public function addScope(ScopeInterface $scope) {
  $name = $scope
    ->getName();
  $parentScope = $scope
    ->getParentName();
  if (self::SCOPE_CONTAINER === $name || self::SCOPE_PROTOTYPE === $name) {
    throw new InvalidArgumentException(sprintf('The scope "%s" is reserved.', $name));
  }
  if (isset($this->scopes[$name])) {
    throw new InvalidArgumentException(sprintf('A scope with name "%s" already exists.', $name));
  }
  if (self::SCOPE_CONTAINER !== $parentScope && !isset($this->scopes[$parentScope])) {
    throw new InvalidArgumentException(sprintf('The parent scope "%s" does not exist, or is invalid.', $parentScope));
  }
  $this->scopes[$name] = $parentScope;
  $this->scopeChildren[$name] = array();

  // normalize the child relations
  while ($parentScope !== self::SCOPE_CONTAINER) {
    $this->scopeChildren[$parentScope][] = $name;
    $parentScope = $this->scopes[$parentScope];
  }
}