[DI] Add check of internal type to ContainerBuilder::getReflectionClass

This commit is contained in:
Sergey Rabochiy 2018-04-24 14:18:57 +07:00 committed by Christophe Coevoet
parent ea25fec603
commit 314e8813b3
2 changed files with 36 additions and 0 deletions

View File

@ -124,6 +124,20 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
private $removedIds = array();
private $alreadyLoading = array();
private static $internalTypes = array(
'int' => true,
'float' => true,
'string' => true,
'bool' => true,
'resource' => true,
'object' => true,
'array' => true,
'null' => true,
'callable' => true,
'iterable' => true,
'mixed' => true,
);
public function __construct(ParameterBagInterface $parameterBag = null)
{
parent::__construct($parameterBag);
@ -341,6 +355,11 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
if (!$class = $this->getParameterBag()->resolveValue($class)) {
return;
}
if (isset(self::$internalTypes[$class])) {
return null;
}
$resource = null;
try {

View File

@ -906,6 +906,23 @@ class ContainerBuilderTest extends TestCase
$this->assertSame('BarMissingClass', (string) end($resources));
}
public function testGetReflectionClassOnInternalTypes()
{
$container = new ContainerBuilder();
$this->assertNull($container->getReflectionClass('int'));
$this->assertNull($container->getReflectionClass('float'));
$this->assertNull($container->getReflectionClass('string'));
$this->assertNull($container->getReflectionClass('bool'));
$this->assertNull($container->getReflectionClass('resource'));
$this->assertNull($container->getReflectionClass('object'));
$this->assertNull($container->getReflectionClass('array'));
$this->assertNull($container->getReflectionClass('null'));
$this->assertNull($container->getReflectionClass('callable'));
$this->assertNull($container->getReflectionClass('iterable'));
$this->assertNull($container->getReflectionClass('mixed'));
}
public function testCompilesClassDefinitionsOfLazyServices()
{
$container = new ContainerBuilder();