namespace Symfony\Component\DependencyInjection\ParameterBag;
-use Symfony\Component\DependencyInjection\Exception\RuntimeException;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
+use Symfony\Component\DependencyInjection\Exception\RuntimeException;
/**
* @author Nicolas Grekas <p@tchwork.com>
class EnvPlaceholderParameterBag extends ParameterBag
{
private $envPlaceholders = array();
+ private $providedTypes = array();
/**
* {@inheritdoc}
return $placeholder; // return first result
}
}
- if (preg_match('/\W/', $env)) {
+ if (!preg_match('/^(?:\w++:)*+\w++$/', $env)) {
throw new InvalidArgumentException(sprintf('Invalid %s name: only "word" characters are allowed.', $name));
}
$defaultValue = parent::get($name);
if (null !== $defaultValue && !is_scalar($defaultValue)) {
- throw new RuntimeException(sprintf('The default value of an env() parameter must be scalar or null, but "%s" given to "%s".', gettype($defaultValue), $name));
+ throw new RuntimeException(sprintf('The default value of an env() parameter must be scalar or null, but "%s" given to "%s".', \gettype($defaultValue), $name));
}
}
$uniqueName = md5($name.uniqid(mt_rand(), true));
- $placeholder = sprintf('env_%s_%s', $env, $uniqueName);
+ $placeholder = sprintf('env_%s_%s', str_replace(':', '_', $env), $uniqueName);
$this->envPlaceholders[$env][$placeholder] = $placeholder;
return $placeholder;
}
}
+ /**
+ * Maps env prefixes to their corresponding PHP types.
+ */
+ public function setProvidedTypes(array $providedTypes)
+ {
+ $this->providedTypes = $providedTypes;
+ }
+
+ /**
+ * Gets the PHP types corresponding to env() parameter prefixes.
+ *
+ * @return string[][]
+ */
+ public function getProvidedTypes()
+ {
+ return $this->providedTypes;
+ }
+
/**
* {@inheritdoc}
*/
parent::resolve();
foreach ($this->envPlaceholders as $env => $placeholders) {
- if (!isset($this->parameters[$name = strtolower("env($env)")])) {
+ if (!$this->has($name = "env($env)")) {
continue;
}
if (is_numeric($default = $this->parameters[$name])) {
$this->parameters[$name] = (string) $default;
} elseif (null !== $default && !is_scalar($default)) {
- throw new RuntimeException(sprintf('The default value of env parameter "%s" must be scalar or null, %s given.', $env, gettype($default)));
+ throw new RuntimeException(sprintf('The default value of env parameter "%s" must be scalar or null, %s given.', $env, \gettype($default)));
}
}
}