private function XmlFileLoader::parseDefinition

Parses an individual Definition

Parameters

string $id:

SimpleXMLElement $service:

string $file:

2 calls to XmlFileLoader::parseDefinition()
XmlFileLoader::parseDefinitions in drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php
Parses multiple definitions
XmlFileLoader::processAnonymousServices in drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php
Processes anonymous services

File

drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php, line 133

Class

XmlFileLoader
XmlFileLoader loads XML files service definitions.

Namespace

Symfony\Component\DependencyInjection\Loader

Code

private function parseDefinition($id, $service, $file) {
  if ((string) $service['alias']) {
    $public = true;
    if (isset($service['public'])) {
      $public = $service
        ->getAttributeAsPhp('public');
    }
    $this->container
      ->setAlias($id, new Alias((string) $service['alias'], $public));
    return;
  }
  if (isset($service['parent'])) {
    $definition = new DefinitionDecorator((string) $service['parent']);
  }
  else {
    $definition = new Definition();
  }
  foreach (array(
    'class',
    'scope',
    'public',
    'factory-class',
    'factory-method',
    'factory-service',
    'synthetic',
    'synchronized',
    'lazy',
    'abstract',
  ) as $key) {
    if (isset($service[$key])) {
      $method = 'set' . str_replace('-', '', $key);
      $definition
        ->{$method}((string) $service
        ->getAttributeAsPhp($key));
    }
  }
  if ($service->file) {
    $definition
      ->setFile((string) $service->file);
  }
  $definition
    ->setArguments($service
    ->getArgumentsAsPhp('argument'));
  $definition
    ->setProperties($service
    ->getArgumentsAsPhp('property'));
  if (isset($service->configurator)) {
    if (isset($service->configurator['function'])) {
      $definition
        ->setConfigurator((string) $service->configurator['function']);
    }
    else {
      if (isset($service->configurator['service'])) {
        $class = new Reference((string) $service->configurator['service'], ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
      }
      else {
        $class = (string) $service->configurator['class'];
      }
      $definition
        ->setConfigurator(array(
        $class,
        (string) $service->configurator['method'],
      ));
    }
  }
  foreach ($service->call as $call) {
    $definition
      ->addMethodCall((string) $call['method'], $call
      ->getArgumentsAsPhp('argument'));
  }
  foreach ($service->tag as $tag) {
    $parameters = array();
    foreach ($tag
      ->attributes() as $name => $value) {
      if ('name' === $name) {
        continue;
      }
      $parameters[$name] = SimpleXMLElement::phpize($value);
    }
    $definition
      ->addTag((string) $tag['name'], $parameters);
  }
  $this->container
    ->setDefinition($id, $definition);
}