getDefinitionId($id);
$this->graph->connect(
$this->currentId,
$this->currentDefinition,
- $this->getDefinitionId($id),
+ $id,
$this->getDefinition($id)
);
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php
index ae58f62bd0813..59fa1b502c3b1 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php
@@ -281,7 +281,7 @@ private function getAutowiredReference(TypedReference $reference, $deprecationMe
$this->lastFailure = null;
$type = $reference->getType();
- if ($type !== (string) $reference || ($this->container->has($type) && !$this->container->findDefinition($type)->isAbstract())) {
+ if ($type !== $this->container->normalizeId($reference) || ($this->container->has($type) && !$this->container->findDefinition($type)->isAbstract())) {
return $reference;
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php b/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php
index 99234812d65ca..1976d0ac56340 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php
@@ -50,7 +50,7 @@ public function process(ContainerBuilder $container)
$alias = $container->getAlias($inner);
$public = $alias->isPublic();
$private = $alias->isPrivate();
- $container->setAlias($renamedId, new Alias((string) $alias, false));
+ $container->setAlias($renamedId, new Alias($container->normalizeId($alias), false));
} else {
$decoratedDefinition = $container->getDefinition($inner);
$definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags()));
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/FactoryReturnTypePass.php b/src/Symfony/Component/DependencyInjection/Compiler/FactoryReturnTypePass.php
index 91497086c21de..825e117ccc016 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/FactoryReturnTypePass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/FactoryReturnTypePass.php
@@ -51,13 +51,12 @@ public function process(ContainerBuilder $container)
private function updateDefinition(ContainerBuilder $container, $id, Definition $definition, array $resolveClassPassChanges, array $previous = array())
{
// circular reference
- $lcId = strtolower($id);
- if (isset($previous[$lcId])) {
+ if (isset($previous[$id])) {
return;
}
$factory = $definition->getFactory();
- if (null === $factory || (!isset($resolveClassPassChanges[$lcId]) && null !== $definition->getClass())) {
+ if (null === $factory || (!isset($resolveClassPassChanges[$id]) && null !== $definition->getClass())) {
return;
}
@@ -73,9 +72,10 @@ private function updateDefinition(ContainerBuilder $container, $id, Definition $
}
} else {
if ($factory[0] instanceof Reference) {
- $previous[$lcId] = true;
- $factoryDefinition = $container->findDefinition((string) $factory[0]);
- $this->updateDefinition($container, $factory[0], $factoryDefinition, $resolveClassPassChanges, $previous);
+ $previous[$id] = true;
+ $factoryId = $container->normalizeId($factory[0]);
+ $factoryDefinition = $container->findDefinition($factoryId);
+ $this->updateDefinition($container, $factoryId, $factoryDefinition, $resolveClassPassChanges, $previous);
$class = $factoryDefinition->getClass();
} else {
$class = $factory[0];
@@ -103,7 +103,7 @@ private function updateDefinition(ContainerBuilder $container, $id, Definition $
}
}
- if (null !== $returnType && (!isset($resolveClassPassChanges[$lcId]) || $returnType !== $resolveClassPassChanges[$lcId])) {
+ if (null !== $returnType && (!isset($resolveClassPassChanges[$id]) || $returnType !== $resolveClassPassChanges[$id])) {
@trigger_error(sprintf('Relying on its factory\'s return-type to define the class of service "%s" is deprecated since Symfony 3.3 and won\'t work in 4.0. Set the "class" attribute to "%s" on the service definition instead.', $id, $returnType), E_USER_DEPRECATED);
}
$definition->setClass($returnType);
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php
index c704891856f9e..c64348ed1de3b 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php
@@ -67,7 +67,7 @@ protected function processValue($value, $isRoot = false)
$value = clone $value;
}
- if (!$value instanceof Reference || !$this->container->hasDefinition($id = (string) $value)) {
+ if (!$value instanceof Reference || !$this->container->hasDefinition($id = $this->container->normalizeId($value))) {
return parent::processValue($value, $isRoot);
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php
index 572eabb7d99e7..63cacfad8359d 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/RegisterServiceSubscribersPass.php
@@ -85,7 +85,7 @@ protected function processValue($value, $isRoot = false)
$serviceMap[$key] = new Reference($type);
}
- $subscriberMap[$key] = new TypedReference((string) $serviceMap[$key], $type, $declaringClass, $optionalBehavior ?: ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE);
+ $subscriberMap[$key] = new TypedReference($this->container->normalizeId($serviceMap[$key]), $type, $declaringClass, $optionalBehavior ?: ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE);
unset($serviceMap[$key]);
}
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php
index bc86e5ab9d11e..8e20676592454 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php
@@ -36,7 +36,7 @@ public function process(ContainerBuilder $container)
$seenAliasTargets = array();
$replacements = array();
foreach ($container->getAliases() as $definitionId => $target) {
- $targetId = (string) $target;
+ $targetId = $container->normalizeId($target);
// Special case: leave this target alone
if ('service_container' === $targetId) {
continue;
@@ -77,7 +77,7 @@ public function process(ContainerBuilder $container)
*/
protected function processValue($value, $isRoot = false)
{
- if ($value instanceof Reference && isset($this->replacements[$referenceId = (string) $value])) {
+ if ($value instanceof Reference && isset($this->replacements[$referenceId = $this->container->normalizeId($value)])) {
// Perform the replacement
$newId = $this->replacements[$referenceId];
$value = new Reference($newId, $value->getInvalidBehavior());
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php
index 73ca29d35f424..63f2a470bac6f 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveBindingsPass.php
@@ -49,7 +49,7 @@ public function process(ContainerBuilder $container)
*/
protected function processValue($value, $isRoot = false)
{
- if ($value instanceof TypedReference && $value->getType() === (string) $value) {
+ if ($value instanceof TypedReference && $value->getType() === $this->container->normalizeId($value)) {
// Already checked
$bindings = $this->container->getDefinition($this->currentId)->getBindings();
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveHotPathPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveHotPathPass.php
index 38e96d06f1a76..2888cf4d396dc 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveHotPathPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveHotPathPass.php
@@ -55,7 +55,7 @@ protected function processValue($value, $isRoot = false)
if ($value instanceof Definition && $isRoot && (isset($this->resolvedIds[$this->currentId]) || !$value->hasTag($this->tagName) || $value->isDeprecated())) {
return $value->isDeprecated() ? $value->clearTag($this->tagName) : $value;
}
- if ($value instanceof Reference && ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior() && $this->container->has($id = (string) $value)) {
+ if ($value instanceof Reference && ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior() && $this->container->has($id = $this->container->normalizeId($value))) {
$definition = $this->container->findDefinition($id);
if (!$definition->hasTag($this->tagName) && !$definition->isDeprecated()) {
$this->resolvedIds[$id] = true;
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php
index cb05f90143525..d60272b276558 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php
@@ -90,9 +90,7 @@ private function processValue($value, $rootLevel = 0, $level = 0)
$value = array_values($value);
}
} elseif ($value instanceof Reference) {
- $id = (string) $value;
-
- if ($this->container->has($id)) {
+ if ($this->container->has($value)) {
return $value;
}
$invalidBehavior = $value->getInvalidBehavior();
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php
index a46c74fbb65f1..831d994536918 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php
@@ -30,7 +30,7 @@ public function process(ContainerBuilder $container)
parent::process($container);
foreach ($container->getAliases() as $id => $alias) {
- $aliasId = (string) $alias;
+ $aliasId = $container->normalizeId($alias);
if ($aliasId !== $defId = $this->getDefinitionId($aliasId, $container)) {
$container->setAlias($id, $defId)->setPublic($alias->isPublic())->setPrivate($alias->isPrivate());
}
@@ -43,7 +43,7 @@ public function process(ContainerBuilder $container)
protected function processValue($value, $isRoot = false)
{
if ($value instanceof Reference) {
- $defId = $this->getDefinitionId($id = (string) $value, $this->container);
+ $defId = $this->getDefinitionId($id = $this->container->normalizeId($value), $this->container);
if ($defId !== $id) {
return new Reference($defId, $value->getInvalidBehavior());
@@ -69,7 +69,7 @@ private function getDefinitionId($id, ContainerBuilder $container)
throw new ServiceCircularReferenceException($id, array_keys($seen));
}
$seen[$id] = true;
- $id = (string) $container->getAlias($id);
+ $id = $container->normalizeId($container->getAlias($id));
}
return $id;
diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php
index 9245f21f74cb8..bde9433690f95 100644
--- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php
+++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php
@@ -26,7 +26,7 @@ class ResolveServiceSubscribersPass extends AbstractRecursivePass
protected function processValue($value, $isRoot = false)
{
- if ($value instanceof Reference && $this->serviceLocator && ContainerInterface::class === (string) $value) {
+ if ($value instanceof Reference && $this->serviceLocator && ContainerInterface::class === $this->container->normalizeId($value)) {
return new Reference($this->serviceLocator);
}
diff --git a/src/Symfony/Component/DependencyInjection/Container.php b/src/Symfony/Component/DependencyInjection/Container.php
index aa714728cd33a..5ca9b25adc0f5 100644
--- a/src/Symfony/Component/DependencyInjection/Container.php
+++ b/src/Symfony/Component/DependencyInjection/Container.php
@@ -507,7 +507,7 @@ protected function getEnv($name)
*/
public function normalizeId($id)
{
- if (!is_string($id)) {
+ if (!\is_string($id)) {
$id = (string) $id;
}
if (isset($this->normalizedIds[$normalizedId = strtolower($id)])) {
diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php
index 6e025387f5c8b..512abd1d271a0 100644
--- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php
+++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php
@@ -346,9 +346,11 @@ public function getReflectionClass($class, $throw = true)
try {
if (isset($this->classReflectors[$class])) {
$classReflector = $this->classReflectors[$class];
- } else {
+ } elseif ($this->trackResources) {
$resource = new ClassExistenceResource($class, false);
$classReflector = $resource->isFresh(0) ? false : new \ReflectionClass($class);
+ } else {
+ $classReflector = new \ReflectionClass($class);
}
} catch (\ReflectionException $e) {
if ($throw) {
@@ -627,7 +629,7 @@ private function doGet($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_
*
* @throws BadMethodCallException When this ContainerBuilder is compiled
*/
- public function merge(ContainerBuilder $container)
+ public function merge(self $container)
{
if ($this->isCompiled()) {
throw new BadMethodCallException('Cannot merge on a compiled container.');
@@ -1373,16 +1375,16 @@ public function resolveEnvPlaceholders($value, $format = null, array &$usedEnvs
$value = $bag->resolveValue($value);
}
- if (is_array($value)) {
+ if (\is_array($value)) {
$result = array();
foreach ($value as $k => $v) {
- $result[$this->resolveEnvPlaceholders($k, $format, $usedEnvs)] = $this->resolveEnvPlaceholders($v, $format, $usedEnvs);
+ $result[\is_string($k) ? $this->resolveEnvPlaceholders($k, $format, $usedEnvs) : $k] = $this->resolveEnvPlaceholders($v, $format, $usedEnvs);
}
return $result;
}
- if (!is_string($value)) {
+ if (!\is_string($value) || 38 > \strlen($value)) {
return $value;
}
$envPlaceholders = $bag instanceof EnvPlaceholderParameterBag ? $bag->getEnvPlaceholders() : $this->envPlaceholders;
@@ -1455,6 +1457,18 @@ public function log(CompilerPassInterface $pass, $message)
$this->getCompiler()->log($pass, $message);
}
+ /**
+ * {@inheritdoc}
+ */
+ public function normalizeId($id)
+ {
+ if (!\is_string($id)) {
+ $id = (string) $id;
+ }
+
+ return isset($this->definitions[$id]) || isset($this->aliasDefinitions[$id]) || isset($this->removedIds[$id]) ? $id : parent::normalizeId($id);
+ }
+
/**
* Returns the Service Conditionals.
*
diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
index 9461e1ccb53f1..f4aa0582f7983 100644
--- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
+++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
@@ -1232,9 +1232,9 @@ private function addAliases()
$code = " \$this->aliases = array(\n";
ksort($aliases);
foreach ($aliases as $alias => $id) {
- $id = (string) $id;
+ $id = $this->container->normalizeId($id);
while (isset($aliases[$id])) {
- $id = (string) $aliases[$id];
+ $id = $this->container->normalizeId($aliases[$id]);
}
$code .= ' '.$this->doExport($alias).' => '.$this->doExport($id).",\n";
}
@@ -1555,7 +1555,7 @@ private function getServiceCallsFromArguments(array $arguments, array &$calls, $
if (is_array($argument)) {
$this->getServiceCallsFromArguments($argument, $calls, $isPreInstance, $callerId, $behavior, $step);
} elseif ($argument instanceof Reference) {
- $id = (string) $argument;
+ $id = $this->container->normalizeId($argument);
if (!isset($calls[$id])) {
$calls[$id] = (int) ($isPreInstance && isset($this->circularReferences[$callerId][$id]));
@@ -1625,7 +1625,7 @@ private function hasReference($id, array $arguments, $deep = false, array &$visi
continue;
} elseif ($argument instanceof Reference) {
- $argumentId = (string) $argument;
+ $argumentId = $this->container->normalizeId($argument);
if ($id === $argumentId) {
return true;
}
@@ -1790,11 +1790,12 @@ private function dumpValue($value, $interpolate = true)
} elseif ($value instanceof Variable) {
return '$'.$value;
} elseif ($value instanceof Reference) {
- if (null !== $this->referenceVariables && isset($this->referenceVariables[$id = (string) $value])) {
+ $id = $this->container->normalizeId($value);
+ if (null !== $this->referenceVariables && isset($this->referenceVariables[$id])) {
return $this->dumpValue($this->referenceVariables[$id], $interpolate);
}
- return $this->getServiceCall((string) $value, $value);
+ return $this->getServiceCall($id, $value);
} elseif ($value instanceof Expression) {
return $this->getExpressionLanguage()->compile((string) $value, array('this' => 'container'));
} elseif ($value instanceof Parameter) {
@@ -1881,6 +1882,7 @@ private function getServiceCall($id, Reference $reference = null)
while ($this->container->hasAlias($id)) {
$id = (string) $this->container->getAlias($id);
}
+ $id = $this->container->normalizeId($id);
if ('service_container' === $id) {
return '$this';
diff --git a/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php b/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php
index 257c4334300d5..bb3e2110254df 100644
--- a/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php
+++ b/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php
@@ -173,16 +173,16 @@ public function resolve()
*/
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;
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php b/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
index f12fc608c9608..56046e735b998 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
@@ -1001,6 +1001,26 @@ public function testParameterWithLowerCase()
$this->assertSame('bar', $container->getParameter('FOO'));
}
+
+ /**
+ * @group legacy
+ * @expectedDeprecation Service identifiers will be made case sensitive in Symfony 4.0. Using "foo" instead of "Foo" is deprecated since Symfony 3.3.
+ * @expectedDeprecation The "Foo" service is deprecated. You should stop using it, as it will soon be removed.
+ */
+ public function testReferenceWithLowerCaseId()
+ {
+ $container = new ContainerBuilder();
+ $container->register('Bar', 'stdClass')->setProperty('foo', new Reference('foo'))->setPublic(true);
+ $container->register('Foo', 'stdClass')->setDeprecated();
+ $container->compile();
+
+ $dumper = new PhpDumper($container);
+ eval('?>'.$dumper->dump(array('class' => 'Symfony_DI_PhpDumper_Test_Reference_With_Lower_Case_Id')));
+
+ $container = new \Symfony_DI_PhpDumper_Test_Reference_With_Lower_Case_Id();
+
+ $this->assertEquals((object) array('foo' => (object) array()), $container->get('Bar'));
+ }
}
class Rot13EnvVarProcessor implements EnvVarProcessorInterface
diff --git a/src/Symfony/Component/Finder/Finder.php b/src/Symfony/Component/Finder/Finder.php
index 8e33d4118bd4d..c28aaf7428e55 100644
--- a/src/Symfony/Component/Finder/Finder.php
+++ b/src/Symfony/Component/Finder/Finder.php
@@ -297,6 +297,10 @@ public function size($size)
/**
* Excludes directories.
*
+ * Directories passed as argument must be relative to the ones defined with the `in()` method. For example:
+ *
+ * $finder->in(__DIR__)->exclude('ruby');
+ *
* @param string|array $dirs A directory path or an array of directories
*
* @return $this
diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php
index 89cc15e19335b..156a0f511fcb8 100644
--- a/src/Symfony/Component/HttpKernel/Kernel.php
+++ b/src/Symfony/Component/HttpKernel/Kernel.php
@@ -67,11 +67,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
private $requestStackSize = 0;
private $resetServices = false;
- const VERSION = '3.4.5';
- const VERSION_ID = 30405;
+ const VERSION = '3.4.6';
+ const VERSION_ID = 30406;
const MAJOR_VERSION = 3;
const MINOR_VERSION = 4;
- const RELEASE_VERSION = 5;
+ const RELEASE_VERSION = 6;
const EXTRA_VERSION = '';
const END_OF_MAINTENANCE = '11/2020';
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy