public function ContainerBuilder::merge

Merges a ContainerBuilder with the current ContainerBuilder configuration.

Service definitions overrides the current defined ones.

But for parameters, they are overridden by the current ones. It allows the parameters passed to the container constructor to have precedence over the loaded ones.

$container = new ContainerBuilder(array('foo' => 'bar')); $loader = new LoaderXXX($container); $loader->load('resource_name'); $container->register('foo', new stdClass());

In the above example, even if the loaded resource defines a foo parameter, the value will still be 'bar' as defined in the ContainerBuilder constructor.

@api

Parameters

ContainerBuilder $container The ContainerBuilder instance to merge.:

Throws

BadMethodCallException When this ContainerBuilder is frozen

File

drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/ContainerBuilder.php, line 537

Class

ContainerBuilder
ContainerBuilder is a DI container that provides an API to easily describe services.

Namespace

Symfony\Component\DependencyInjection

Code

public function merge(ContainerBuilder $container) {
  if ($this
    ->isFrozen()) {
    throw new BadMethodCallException('Cannot merge on a frozen container.');
  }
  $this
    ->addDefinitions($container
    ->getDefinitions());
  $this
    ->addAliases($container
    ->getAliases());
  $this
    ->getParameterBag()
    ->add($container
    ->getParameterBag()
    ->all());
  if ($this->trackResources) {
    foreach ($container
      ->getResources() as $resource) {
      $this
        ->addResource($resource);
    }
  }
  foreach ($this->extensions as $name => $extension) {
    if (!isset($this->extensionConfigs[$name])) {
      $this->extensionConfigs[$name] = array();
    }
    $this->extensionConfigs[$name] = array_merge($this->extensionConfigs[$name], $container
      ->getExtensionConfig($name));
  }
}