Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\DependencyInjection\Compiler; Chris@0: Chris@0: use Symfony\Component\DependencyInjection\ContainerBuilder; Chris@0: use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; Chris@0: Chris@0: /** Chris@0: * Resolves all parameter placeholders "%somevalue%" to their real values. Chris@0: * Chris@0: * @author Johannes M. Schmitt Chris@0: */ Chris@0: class ResolveParameterPlaceHoldersPass implements CompilerPassInterface Chris@0: { Chris@0: /** Chris@0: * Processes the ContainerBuilder to resolve parameter placeholders. Chris@0: * Chris@0: * @param ContainerBuilder $container Chris@0: * Chris@0: * @throws ParameterNotFoundException Chris@0: */ Chris@0: public function process(ContainerBuilder $container) Chris@0: { Chris@0: $parameterBag = $container->getParameterBag(); Chris@0: Chris@0: foreach ($container->getDefinitions() as $id => $definition) { Chris@0: try { Chris@0: $definition->setClass($parameterBag->resolveValue($definition->getClass())); Chris@0: $definition->setFile($parameterBag->resolveValue($definition->getFile())); Chris@0: $definition->setArguments($parameterBag->resolveValue($definition->getArguments())); Chris@0: Chris@0: $factory = $definition->getFactory(); Chris@0: Chris@0: if (is_array($factory) && isset($factory[0])) { Chris@0: $factory[0] = $parameterBag->resolveValue($factory[0]); Chris@0: $definition->setFactory($factory); Chris@0: } Chris@0: Chris@0: $calls = array(); Chris@0: foreach ($definition->getMethodCalls() as $name => $arguments) { Chris@0: $calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments); Chris@0: } Chris@0: $definition->setMethodCalls($calls); Chris@0: Chris@0: $definition->setProperties($parameterBag->resolveValue($definition->getProperties())); Chris@0: } catch (ParameterNotFoundException $e) { Chris@0: $e->setSourceId($id); Chris@0: Chris@0: throw $e; Chris@0: } Chris@0: } Chris@0: Chris@0: $aliases = array(); Chris@0: foreach ($container->getAliases() as $name => $target) { Chris@0: $aliases[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($target); Chris@0: } Chris@0: $container->setAliases($aliases); Chris@0: Chris@0: $parameterBag->resolve(); Chris@0: } Chris@0: }