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@14: use Symfony\Component\DependencyInjection\Definition; 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@14: class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass Chris@0: { Chris@14: private $bag; Chris@14: private $resolveArrays; Chris@14: Chris@14: public function __construct($resolveArrays = true) Chris@14: { Chris@14: $this->resolveArrays = $resolveArrays; Chris@14: } Chris@14: Chris@0: /** Chris@14: * {@inheritdoc} Chris@0: * Chris@0: * @throws ParameterNotFoundException Chris@0: */ Chris@0: public function process(ContainerBuilder $container) Chris@0: { Chris@14: $this->bag = $container->getParameterBag(); Chris@0: Chris@14: try { Chris@14: parent::process($container); Chris@0: Chris@17: $aliases = []; Chris@14: foreach ($container->getAliases() as $name => $target) { Chris@14: $this->currentId = $name; Chris@14: $aliases[$this->bag->resolveValue($name)] = $target; Chris@14: } Chris@14: $container->setAliases($aliases); Chris@14: } catch (ParameterNotFoundException $e) { Chris@14: $e->setSourceId($this->currentId); Chris@0: Chris@14: throw $e; Chris@14: } Chris@0: Chris@14: $this->bag->resolve(); Chris@14: $this->bag = null; Chris@14: } Chris@0: Chris@14: protected function processValue($value, $isRoot = false) Chris@14: { Chris@17: if (\is_string($value)) { Chris@14: $v = $this->bag->resolveValue($value); Chris@0: Chris@17: return $this->resolveArrays || !$v || !\is_array($v) ? $v : $value; Chris@14: } Chris@14: if ($value instanceof Definition) { Chris@14: $value->setBindings($this->processValue($value->getBindings())); Chris@14: $changes = $value->getChanges(); Chris@14: if (isset($changes['class'])) { Chris@14: $value->setClass($this->bag->resolveValue($value->getClass())); Chris@14: } Chris@14: if (isset($changes['file'])) { Chris@14: $value->setFile($this->bag->resolveValue($value->getFile())); Chris@0: } Chris@0: } Chris@0: Chris@14: $value = parent::processValue($value, $isRoot); Chris@14: Chris@17: if ($value && \is_array($value)) { Chris@14: $value = array_combine($this->bag->resolveValue(array_keys($value)), $value); Chris@0: } Chris@0: Chris@14: return $value; Chris@0: } Chris@0: }