comparison vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
comparison
equal deleted inserted replaced
13:5fb285c0d0e3 14:1fec387a4317
10 */ 10 */
11 11
12 namespace Symfony\Component\DependencyInjection\Compiler; 12 namespace Symfony\Component\DependencyInjection\Compiler;
13 13
14 use Symfony\Component\DependencyInjection\ContainerBuilder; 14 use Symfony\Component\DependencyInjection\ContainerBuilder;
15 use Symfony\Component\DependencyInjection\Definition;
15 use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; 16 use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;
16 17
17 /** 18 /**
18 * Resolves all parameter placeholders "%somevalue%" to their real values. 19 * Resolves all parameter placeholders "%somevalue%" to their real values.
19 * 20 *
20 * @author Johannes M. Schmitt <schmittjoh@gmail.com> 21 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
21 */ 22 */
22 class ResolveParameterPlaceHoldersPass implements CompilerPassInterface 23 class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass
23 { 24 {
25 private $bag;
26 private $resolveArrays;
27
28 public function __construct($resolveArrays = true)
29 {
30 $this->resolveArrays = $resolveArrays;
31 }
32
24 /** 33 /**
25 * Processes the ContainerBuilder to resolve parameter placeholders. 34 * {@inheritdoc}
26 *
27 * @param ContainerBuilder $container
28 * 35 *
29 * @throws ParameterNotFoundException 36 * @throws ParameterNotFoundException
30 */ 37 */
31 public function process(ContainerBuilder $container) 38 public function process(ContainerBuilder $container)
32 { 39 {
33 $parameterBag = $container->getParameterBag(); 40 $this->bag = $container->getParameterBag();
34 41
35 foreach ($container->getDefinitions() as $id => $definition) { 42 try {
36 try { 43 parent::process($container);
37 $definition->setClass($parameterBag->resolveValue($definition->getClass()));
38 $definition->setFile($parameterBag->resolveValue($definition->getFile()));
39 $definition->setArguments($parameterBag->resolveValue($definition->getArguments()));
40 44
41 $factory = $definition->getFactory(); 45 $aliases = array();
46 foreach ($container->getAliases() as $name => $target) {
47 $this->currentId = $name;
48 $aliases[$this->bag->resolveValue($name)] = $target;
49 }
50 $container->setAliases($aliases);
51 } catch (ParameterNotFoundException $e) {
52 $e->setSourceId($this->currentId);
42 53
43 if (is_array($factory) && isset($factory[0])) { 54 throw $e;
44 $factory[0] = $parameterBag->resolveValue($factory[0]); 55 }
45 $definition->setFactory($factory);
46 }
47 56
48 $calls = array(); 57 $this->bag->resolve();
49 foreach ($definition->getMethodCalls() as $name => $arguments) { 58 $this->bag = null;
50 $calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments); 59 }
51 }
52 $definition->setMethodCalls($calls);
53 60
54 $definition->setProperties($parameterBag->resolveValue($definition->getProperties())); 61 protected function processValue($value, $isRoot = false)
55 } catch (ParameterNotFoundException $e) { 62 {
56 $e->setSourceId($id); 63 if (is_string($value)) {
64 $v = $this->bag->resolveValue($value);
57 65
58 throw $e; 66 return $this->resolveArrays || !$v || !is_array($v) ? $v : $value;
67 }
68 if ($value instanceof Definition) {
69 $value->setBindings($this->processValue($value->getBindings()));
70 $changes = $value->getChanges();
71 if (isset($changes['class'])) {
72 $value->setClass($this->bag->resolveValue($value->getClass()));
73 }
74 if (isset($changes['file'])) {
75 $value->setFile($this->bag->resolveValue($value->getFile()));
59 } 76 }
60 } 77 }
61 78
62 $aliases = array(); 79 $value = parent::processValue($value, $isRoot);
63 foreach ($container->getAliases() as $name => $target) { 80
64 $aliases[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($target); 81 if ($value && is_array($value)) {
82 $value = array_combine($this->bag->resolveValue(array_keys($value)), $value);
65 } 83 }
66 $container->setAliases($aliases);
67 84
68 $parameterBag->resolve(); 85 return $value;
69 } 86 }
70 } 87 }