X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fdependency-injection%2FCompiler%2FResolveParameterPlaceHoldersPass.php;h=9733e5d0943336db78da17762ca8f86386852d5a;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=0c5963cc1180bb0ad4c80d123bf6f1e19da5ab48;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php b/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php index 0c5963cc1..9733e5d09 100644 --- a/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php +++ b/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php @@ -12,6 +12,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; /** @@ -19,52 +20,68 @@ use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; * * @author Johannes M. Schmitt */ -class ResolveParameterPlaceHoldersPass implements CompilerPassInterface +class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass { + private $bag; + private $resolveArrays; + + public function __construct($resolveArrays = true) + { + $this->resolveArrays = $resolveArrays; + } + /** - * Processes the ContainerBuilder to resolve parameter placeholders. - * - * @param ContainerBuilder $container + * {@inheritdoc} * * @throws ParameterNotFoundException */ public function process(ContainerBuilder $container) { - $parameterBag = $container->getParameterBag(); + $this->bag = $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())); + try { + parent::process($container); - $factory = $definition->getFactory(); + $aliases = array(); + foreach ($container->getAliases() as $name => $target) { + $this->currentId = $name; + $aliases[$this->bag->resolveValue($name)] = $target; + } + $container->setAliases($aliases); + } catch (ParameterNotFoundException $e) { + $e->setSourceId($this->currentId); - if (is_array($factory) && isset($factory[0])) { - $factory[0] = $parameterBag->resolveValue($factory[0]); - $definition->setFactory($factory); - } + throw $e; + } - $calls = array(); - foreach ($definition->getMethodCalls() as $name => $arguments) { - $calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments); - } - $definition->setMethodCalls($calls); + $this->bag->resolve(); + $this->bag = null; + } - $definition->setProperties($parameterBag->resolveValue($definition->getProperties())); - } catch (ParameterNotFoundException $e) { - $e->setSourceId($id); + protected function processValue($value, $isRoot = false) + { + if (is_string($value)) { + $v = $this->bag->resolveValue($value); - throw $e; + return $this->resolveArrays || !$v || !is_array($v) ? $v : $value; + } + if ($value instanceof Definition) { + $value->setBindings($this->processValue($value->getBindings())); + $changes = $value->getChanges(); + if (isset($changes['class'])) { + $value->setClass($this->bag->resolveValue($value->getClass())); + } + if (isset($changes['file'])) { + $value->setFile($this->bag->resolveValue($value->getFile())); } } - $aliases = array(); - foreach ($container->getAliases() as $name => $target) { - $aliases[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($target); + $value = parent::processValue($value, $isRoot); + + if ($value && is_array($value)) { + $value = array_combine($this->bag->resolveValue(array_keys($value)), $value); } - $container->setAliases($aliases); - $parameterBag->resolve(); + return $value; } }