8000 bug #25160 [DI] Prevent a ReflectionException during cache:clear when… · symfony/symfony@a19d1e5 · GitHub
[go: up one dir, main page]

Skip to content

Commit a19d1e5

Browse files
bug #25160 [DI] Prevent a ReflectionException during cache:clear when the parent class doesn't exist (dunglas)
This PR was squashed before being merged into the 3.4 branch (closes #25160). Discussion ---------- [DI] Prevent a ReflectionException during cache:clear when the parent class doesn't exist | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no <!-- don't forget to update src/**/CHANGELOG.md files --> | BC breaks? | no | Deprecations? | no <!-- don't forget to update UPGRADE-*.md files --> | Tests pass? | yes | Fixed tickets | n/a | License | MIT | Doc PR | n/a Currently, if you just run the following commands: ``` composer create-project -s beta symfony/skeleton:^3.4 test composer req orm ``` You get the following error: ``` In UniqueEntityValidator.php line 27: [ReflectionException] Class Symfony\Component\Validator\ConstraintValidator not found ``` `UniqueEntityValidator` is in the bridge, but it's parent class is in the validator (that is not installed by default). The hot pat 8000 h optimization feature (enabled by default) uses reflection, and the reflection API throws an exception in this specific case. This PR fixes the error. Commits ------- 6e622c6 [DI] Prevent a ReflectionException during cache:clear when the parent class doesn't exist
2 parents d954af5 + 6e622c6 commit a19d1e5

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ private function collectLineage($class, array &$lineage)
378378
if (isset($lineage[$class])) {
379379
return;
380380
}
381-
if (!$r = $this->container->getReflectionClass($class)) {
381+
if (!$r = $this->container->getReflectionClass($class, false)) {
382382
return;
383383
}
384384
if ($this->container instanceof $class) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
4+
5+
class ParentNotExists extends \NotExists
6+
{
7+
}

src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container_inline_requires.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
88
use Symfony\Component\DependencyInjection\Reference;
99
use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\HotPath;
10+
use Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists;
1011

1112
$container = new ContainerBuilder();
1213

1314
$container->register(HotPath\C1::class)->addTag('container.hot_path')->setPublic(true);
1415
$container->register(HotPath\C2::class)->addArgument(new Reference(HotPath\C3::class))->setPublic(true);
1516
$container->register(HotPath\C3::class);
17+
$container->register(ParentNotExists::class)->setPublic(true);
1618

1719
return $container;

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/container_inline_requires.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ public function __construct()
3232
'symfony\\component\\dependencyinjection\\tests\\fixtures\\includes\\hotpath\\c1' => 'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C1',
3333
'symfony\\component\\dependencyinjection\\tests\\fixtures\\includes\\hotpath\\c2' => 'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C2',
3434
'symfony\\component\\dependencyinjection\\tests\\fixtures\\includes\\hotpath\\c3' => 'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C3',
35+
'symfony\\component\\dependencyinjection\\tests\\fixtures\\parentnotexists' => 'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\ParentNotExists',
3536
);
3637
$this->methodMap = array(
38+
'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\ParentNotExists' => 'getParentNotExistsService',
3739
'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C1' => 'getC1Service',
3840
'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C2' => 'getC2Service',
3941
'Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\includes\\HotPath\\C3' => 'getC3Service',
@@ -75,6 +77,16 @@ public function isFrozen()
7577
return true;
7678
}
7779

80+
/**
81+
* Gets the public 'Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists' shared service.
82+
*
83+
* @return \Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists
84+
*/
85+
protected function getParentNotExistsService()
86+
{
87+
return $this->services['Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists'] = new \Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists();
88+
}
89+
7890
/**
7991
* Gets the public 'Symfony\Component\DependencyInjection\Tests\Fixtures\includes\HotPath\C1' shared service.
8092
*

0 commit comments

Comments
 (0)
0