You are here

ResolveParameterPlaceHoldersPass.php in Service Container 7

File

modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php
View source
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;

/**
 * Resolves all parameter placeholders "%somevalue%" to their real values.
 *
 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 */
class ResolveParameterPlaceHoldersPass implements CompilerPassInterface {

  /**
   * Processes the ContainerBuilder to resolve parameter placeholders.
   *
   * @param ContainerBuilder $container
   *
   * @throws ParameterNotFoundException
   */
  public function process(ContainerBuilder $container) {
    $parameterBag = $container
      ->getParameterBag();
    foreach ($container
      ->getDefinitions() as $id => $definition) {
      try {
        $definition
          ->setClass($parameterBag
          ->resolveValue($definition
          ->getClass()));
        $definition
          ->setFile($parameterBag
          ->resolveValue($definition
          ->getFile()));
        $definition
          ->setArguments($parameterBag
          ->resolveValue($definition
          ->getArguments()));
        if ($definition
          ->getFactoryClass(false)) {
          $definition
            ->setFactoryClass($parameterBag
            ->resolveValue($definition
            ->getFactoryClass()));
        }
        $factory = $definition
          ->getFactory();
        if (is_array($factory) && isset($factory[0])) {
          $factory[0] = $parameterBag
            ->resolveValue($factory[0]);
          $definition
            ->setFactory($factory);
        }
        $calls = array();
        foreach ($definition
          ->getMethodCalls() as $name => $arguments) {
          $calls[$parameterBag
            ->resolveValue($name)] = $parameterBag
            ->resolveValue($arguments);
        }
        $definition
          ->setMethodCalls($calls);
        $definition
          ->setProperties($parameterBag
          ->resolveValue($definition
          ->getProperties()));
      } catch (ParameterNotFoundException $e) {
        $e
          ->setSourceId($id);
        throw $e;
      }
    }
    $aliases = array();
    foreach ($container
      ->getAliases() as $name => $target) {
      $aliases[$parameterBag
        ->resolveValue($name)] = $parameterBag
        ->resolveValue($target);
    }
    $container
      ->setAliases($aliases);
    $parameterBag
      ->resolve();
  }

}

Classes

Namesort descending Description
ResolveParameterPlaceHoldersPass Resolves all parameter placeholders "%somevalue%" to their real values.