|
@@ -30,21 +30,22 @@ class ResolveParameterPlaceHoldersPass implements CompilerPassInterface
|
|
|
*/
|
|
|
public function process(ContainerBuilder $container)
|
|
|
{
|
|
|
- $this->parameterBag = $container->getParameterBag();
|
|
|
+ $parameterBag = $container->getParameterBag();
|
|
|
+ $parameterBag->resolve();
|
|
|
|
|
|
foreach ($container->getDefinitions() as $id => $definition) {
|
|
|
try {
|
|
|
- $definition->setClass($this->resolveValue($definition->getClass()));
|
|
|
- $definition->setFile($this->resolveValue($definition->getFile()));
|
|
|
- $definition->setArguments($this->resolveValue($definition->getArguments()));
|
|
|
+ $definition->setClass($parameterBag->resolveValue($definition->getClass()));
|
|
|
+ $definition->setFile($parameterBag->resolveValue($definition->getFile()));
|
|
|
+ $definition->setArguments($parameterBag->resolveValue($definition->getArguments()));
|
|
|
|
|
|
$calls = array();
|
|
|
foreach ($definition->getMethodCalls() as $name => $arguments) {
|
|
|
- $calls[$this->resolveValue($name)] = $this->resolveValue($arguments);
|
|
|
+ $calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments);
|
|
|
}
|
|
|
$definition->setMethodCalls($calls);
|
|
|
|
|
|
- $definition->setProperties($this->resolveValue($definition->getProperties()));
|
|
|
+ $definition->setProperties($parameterBag->resolveValue($definition->getProperties()));
|
|
|
} catch (ParameterNotFoundException $e) {
|
|
|
$e->setSourceId($id);
|
|
|
|
|
@@ -54,69 +55,8 @@ class ResolveParameterPlaceHoldersPass implements CompilerPassInterface
|
|
|
|
|
|
$aliases = array();
|
|
|
foreach ($container->getAliases() as $name => $target) {
|
|
|
- $aliases[$this->resolveValue($name)] = $this->resolveValue($target);
|
|
|
+ $aliases[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($target);
|
|
|
}
|
|
|
$container->setAliases($aliases);
|
|
|
-
|
|
|
- $parameterBag = $container->getParameterBag();
|
|
|
- foreach ($parameterBag->all() as $key => $value) {
|
|
|
- try {
|
|
|
- $parameterBag->set($key, $this->resolveValue($value));
|
|
|
- } catch (ParameterNotFoundException $e) {
|
|
|
- $e->setSourceKey($key);
|
|
|
-
|
|
|
- throw $e;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Expands parameters into their full values
|
|
|
- *
|
|
|
- * @param mixed $value The value to resolve
|
|
|
- * @return mixed The resolved value
|
|
|
- */
|
|
|
- private function resolveValue($value)
|
|
|
- {
|
|
|
- if (is_array($value)) {
|
|
|
- $resolved = array();
|
|
|
- foreach ($value as $k => $v) {
|
|
|
- $resolved[$this->resolveValue($k)] = $this->resolveValue($v);
|
|
|
- }
|
|
|
-
|
|
|
- return $resolved;
|
|
|
- } else if (is_string($value)) {
|
|
|
- return $this->resolveString($value);
|
|
|
- }
|
|
|
-
|
|
|
- return $value;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Resolves parameters inside a string
|
|
|
- *
|
|
|
- * @param string $value The string to resolve
|
|
|
- * @return string The resolved string
|
|
|
- * @throws \RuntimeException when a given parameter has a type problem.
|
|
|
- */
|
|
|
- public function resolveString($value)
|
|
|
- {
|
|
|
- if (preg_match('/^%[^%]+%$/', $value)) {
|
|
|
- return $this->resolveValue($this->parameterBag->resolveValue($value));
|
|
|
- }
|
|
|
-
|
|
|
- $self = $this;
|
|
|
- $parameterBag = $this->parameterBag;
|
|
|
- return preg_replace_callback('/(?<!%)%[^%]+%/',
|
|
|
- function($parameter) use ($self, $parameterBag) {
|
|
|
- $resolved = $parameterBag->resolveValue($parameter[0]);
|
|
|
- if (!is_string($resolved)) {
|
|
|
- throw new \RuntimeException('You can only embed strings in other parameters.');
|
|
|
- }
|
|
|
-
|
|
|
- return $self->resolveString($resolved);
|
|
|
- },
|
|
|
- $value
|
|
|
- );
|
|
|
}
|
|
|
}
|