X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fdependency-injection%2FParameterBag%2FParameterBag.php;h=e06fd344c05a027307ee5a74b006c95aaae4cf0a;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=0611b1f69e322045f6d9751919873d30c6233f4a;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php b/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php index 0611b1f69..e06fd344c 100644 --- a/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php +++ b/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php @@ -11,8 +11,8 @@ namespace Symfony\Component\DependencyInjection\ParameterBag; -use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; +use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** @@ -25,6 +25,8 @@ class ParameterBag implements ParameterBagInterface protected $parameters = array(); protected $resolved = false; + private $normalizedNames = array(); + /** * @param array $parameters An array of parameters */ @@ -49,7 +51,7 @@ class ParameterBag implements ParameterBagInterface public function add(array $parameters) { foreach ($parameters as $key => $value) { - $this->parameters[strtolower($key)] = $value; + $this->set($key, $value); } } @@ -66,7 +68,7 @@ class ParameterBag implements ParameterBagInterface */ public function get($name) { - $name = strtolower($name); + $name = $this->normalizeName($name); if (!array_key_exists($name, $this->parameters)) { if (!$name) { @@ -76,12 +78,28 @@ class ParameterBag implements ParameterBagInterface $alternatives = array(); foreach ($this->parameters as $key => $parameterValue) { $lev = levenshtein($name, $key); - if ($lev <= strlen($name) / 3 || false !== strpos($key, $name)) { + if ($lev <= \strlen($name) / 3 || false !== strpos($key, $name)) { $alternatives[] = $key; } } - throw new ParameterNotFoundException($name, null, null, null, $alternatives); + $nonNestedAlternative = null; + if (!\count($alternatives) && false !== strpos($name, '.')) { + $namePartsLength = array_map('strlen', explode('.', $name)); + $key = substr($name, 0, -1 * (1 + array_pop($namePartsLength))); + while (\count($namePartsLength)) { + if ($this->has($key)) { + if (\is_array($this->get($key))) { + $nonNestedAlternative = $key; + } + break; + } + + $key = substr($key, 0, -1 * (1 + array_pop($namePartsLength))); + } + } + + throw new ParameterNotFoundException($name, null, null, null, $alternatives, $nonNestedAlternative); } return $this->parameters[$name]; @@ -95,7 +113,7 @@ class ParameterBag implements ParameterBagInterface */ public function set($name, $value) { - $this->parameters[strtolower($name)] = $value; + $this->parameters[$this->normalizeName($name)] = $value; } /** @@ -103,7 +121,7 @@ class ParameterBag implements ParameterBagInterface */ public function has($name) { - return array_key_exists(strtolower($name), $this->parameters); + return array_key_exists($this->normalizeName($name), $this->parameters); } /** @@ -113,7 +131,7 @@ class ParameterBag implements ParameterBagInterface */ public function remove($name) { - unset($this->parameters[strtolower($name)]); + unset($this->parameters[$this->normalizeName($name)]); } /** @@ -151,20 +169,20 @@ class ParameterBag implements ParameterBagInterface * * @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; } @@ -181,7 +199,7 @@ class ParameterBag implements ParameterBagInterface * * @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()) { @@ -189,40 +207,40 @@ class ParameterBag implements ParameterBagInterface // as the preg_replace_callback throw an exception when trying // a non-string in a parameter value if (preg_match('/^%([^%\s]+)%$/', $value, $match)) { - $key = strtolower($match[1]); + $key = $match[1]; + $lcKey = strtolower($key); // strtolower() to be removed in 4.0 - if (isset($resolving[$key])) { + if (isset($resolving[$lcKey])) { throw new ParameterCircularReferenceException(array_keys($resolving)); } - $resolving[$key] = true; + $resolving[$lcKey] = true; return $this->resolved ? $this->get($key) : $this->resolveValue($this->get($key), $resolving); } - $self = $this; - - return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($self, $resolving, $value) { + return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($resolving, $value) { // skip %% if (!isset($match[1])) { return '%%'; } - $key = strtolower($match[1]); - if (isset($resolving[$key])) { + $key = $match[1]; + $lcKey = strtolower($key); // strtolower() to be removed in 4.0 + if (isset($resolving[$lcKey])) { throw new ParameterCircularReferenceException(array_keys($resolving)); } - $resolved = $self->get($key); + $resolved = $this->get($key); - if (!is_string($resolved) && !is_numeric($resolved)) { - throw new RuntimeException(sprintf('A string value must be composed of strings and/or numbers, but found parameter "%s" of type %s inside string value "%s".', $key, gettype($resolved), $value)); + if (!\is_string($resolved) && !is_numeric($resolved)) { + throw new RuntimeException(sprintf('A string value must be composed of strings and/or numbers, but found parameter "%s" of type %s inside string value "%s".', $key, \gettype($resolved), $value)); } $resolved = (string) $resolved; - $resolving[$key] = true; + $resolving[$lcKey] = true; - return $self->isResolved() ? $resolved : $self->resolveString($resolved, $resolving); + return $this->isResolved() ? $resolved : $this->resolveString($resolved, $resolving); }, $value); } @@ -236,11 +254,11 @@ class ParameterBag implements ParameterBagInterface */ public function escapeValue($value) { - if (is_string($value)) { + if (\is_string($value)) { return str_replace('%', '%%', $value); } - if (is_array($value)) { + if (\is_array($value)) { $result = array(); foreach ($value as $k => $v) { $result[$k] = $this->escapeValue($v); @@ -257,11 +275,11 @@ class ParameterBag implements ParameterBagInterface */ public function unescapeValue($value) { - if (is_string($value)) { + if (\is_string($value)) { return str_replace('%%', '%', $value); } - if (is_array($value)) { + if (\is_array($value)) { $result = array(); foreach ($value as $k => $v) { $result[$k] = $this->unescapeValue($v); @@ -272,4 +290,18 @@ class ParameterBag implements ParameterBagInterface 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; + } }