protected $parameters = array();
protected $resolved = false;
+ private $normalizedNames = array();
+
/**
* @param array $parameters An array of parameters
*/
public function add(array $parameters)
{
foreach ($parameters as $key => $value) {
- $this->parameters[strtolower($key)] = $value;
+ $this->set($key, $value);
}
}
*/
public function get($name)
{
- $name = strtolower($name);
+ $name = $this->normalizeName($name);
if (!array_key_exists($name, $this->parameters)) {
if (!$name) {
*/
public function set($name, $value)
{
- $this->parameters[strtolower($name)] = $value;
+ $this->parameters[$this->normalizeName($name)] = $value;
}
/**
*/
public function has($name)
{
- return array_key_exists(strtolower($name), $this->parameters);
+ return array_key_exists($this->normalizeName($name), $this->parameters);
}
/**
*/
public function remove($name)
{
- unset($this->parameters[strtolower($name)]);
+ unset($this->parameters[$this->normalizeName($name)]);
}
/**
*
* @throws ParameterNotFoundException if a placeholder references a parameter that does not exist
* @throws ParameterCircularReferenceException if a circular reference if detected
- * @throws RuntimeException when a given parameter has a type problem.
+ * @throws RuntimeException when a given parameter has a type problem
*/
public function resolveValue($value, array $resolving = array())
{
- if (is_array($value)) {
+ if (\is_array($value)) {
$args = array();
foreach ($value as $k => $v) {
- $args[$this->resolveValue($k, $resolving)] = $this->resolveValue($v, $resolving);
+ $args[\is_string($k) ? $this->resolveValue($k, $resolving) : $k] = $this->resolveValue($v, $resolving);
}
return $args;
}
- if (!is_string($value)) {
+ if (!\is_string($value) || 2 > \strlen($value)) {
return $value;
}
*
* @throws ParameterNotFoundException if a placeholder references a parameter that does not exist
* @throws ParameterCircularReferenceException if a circular reference if detected
- * @throws RuntimeException when a given parameter has a type problem.
+ * @throws RuntimeException when a given parameter has a type problem
*/
public function resolveString($value, array $resolving = array())
{
// a non-string in a parameter value
if (preg_match('/^%([^%\s]+)%$/', $value, $match)) {
$key = $match[1];
- $lcKey = strtolower($key);
+ $lcKey = strtolower($key); // strtolower() to be removed in 4.0
if (isset($resolving[$lcKey])) {
throw new ParameterCircularReferenceException(array_keys($resolving));
}
$key = $match[1];
- $lcKey = strtolower($key);
+ $lcKey = strtolower($key); // strtolower() to be removed in 4.0
if (isset($resolving[$lcKey])) {
throw new ParameterCircularReferenceException(array_keys($resolving));
}
return $value;
}
+
+ private function normalizeName($name)
+ {
+ if (isset($this->normalizedNames[$normalizedName = strtolower($name)])) {
+ $normalizedName = $this->normalizedNames[$normalizedName];
+ if ((string) $name !== $normalizedName) {
+ @trigger_error(sprintf('Parameter names will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.4.', $name, $normalizedName), E_USER_DEPRECATED);
+ }
+ } else {
+ $normalizedName = $this->normalizedNames[$normalizedName] = (string) $name;
+ }
+
+ return $normalizedName;
+ }
}