Version 1
[yaffs-website] / vendor / symfony / dependency-injection / Compiler / ResolveParameterPlaceHoldersPass.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\DependencyInjection\Compiler;
13
14 use Symfony\Component\DependencyInjection\ContainerBuilder;
15 use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;
16
17 /**
18  * Resolves all parameter placeholders "%somevalue%" to their real values.
19  *
20  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
21  */
22 class ResolveParameterPlaceHoldersPass implements CompilerPassInterface
23 {
24     /**
25      * Processes the ContainerBuilder to resolve parameter placeholders.
26      *
27      * @param ContainerBuilder $container
28      *
29      * @throws ParameterNotFoundException
30      */
31     public function process(ContainerBuilder $container)
32     {
33         $parameterBag = $container->getParameterBag();
34
35         foreach ($container->getDefinitions() as $id => $definition) {
36             try {
37                 $definition->setClass($parameterBag->resolveValue($definition->getClass()));
38                 $definition->setFile($parameterBag->resolveValue($definition->getFile()));
39                 $definition->setArguments($parameterBag->resolveValue($definition->getArguments()));
40                 if ($definition->getFactoryClass(false)) {
41                     $definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass(false)));
42                 }
43
44                 $factory = $definition->getFactory();
45
46                 if (is_array($factory) && isset($factory[0])) {
47                     $factory[0] = $parameterBag->resolveValue($factory[0]);
48                     $definition->setFactory($factory);
49                 }
50
51                 $calls = array();
52                 foreach ($definition->getMethodCalls() as $name => $arguments) {
53                     $calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments);
54                 }
55                 $definition->setMethodCalls($calls);
56
57                 $definition->setProperties($parameterBag->resolveValue($definition->getProperties()));
58             } catch (ParameterNotFoundException $e) {
59                 $e->setSourceId($id);
60
61                 throw $e;
62             }
63         }
64
65         $aliases = array();
66         foreach ($container->getAliases() as $name => $target) {
67             $aliases[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($target);
68         }
69         $container->setAliases($aliases);
70
71         $parameterBag->resolve();
72     }
73 }