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));
}
}
$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])) {