Skip to content

Commit e87435e

Browse files
authored
Merge pull request PHP-DI#886 from bdsl/patch-1
Show circular list of depedencies on circular dependancy error message
2 parents e9d5a6f + 60c3ef4 commit e87435e

File tree

4 files changed

+8
-6
lines changed

4 files changed

+8
-6
lines changed

src/CompiledContainer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ public function get(string $id) : mixed
4646
if ($method !== null) {
4747
// Check if we are already getting this entry -> circular dependency
4848
if (isset($this->entriesBeingResolved[$id])) {
49-
throw new DependencyException("Circular dependency detected while trying to resolve entry '$id'");
49+
$idList = implode(" -> ", [...array_keys($this->entriesBeingResolved), $id]);
50+
throw new DependencyException("Circular dependency detected while trying to resolve entry '$id': Dependencies: " . $idList);
5051
}
5152
$this->entriesBeingResolved[$id] = true;
5253

src/Container.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,8 @@ private function resolveDefinition(Definition $definition, array $parameters = [
344344

345345
// Check if we are already getting this entry -> circular dependency
346346
if (isset($this->entriesBeingResolved[$entryName])) {
347-
throw new DependencyException("Circular dependency detected while trying to resolve entry '$entryName'");
347+
$entryList = implode(" -> ", [...array_keys($this->entriesBeingResolved), $entryName]);
348+
throw new DependencyException("Circular dependency detected while trying to resolve entry '$entryName': Dependencies: " . $entryList);
348349
}
349350
$this->entriesBeingResolved[$entryName] = true;
350351

tests/IntegrationTest/CircularDependencyTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function circular_dependencies_throw_exceptions(ContainerBuilder $builder
5252
public function circular_dependencies_with_attributes_throw_exceptions(ContainerBuilder $builder)
5353
{
5454
$this->expectException(DependencyException::class);
55-
$this->expectExceptionMessage('Circular dependency detected while trying to resolve entry \'DI\Test\UnitTest\Fixtures\Class1CircularDependencies\'');
55+
$this->expectExceptionMessage("Circular dependency detected while trying to resolve entry 'DI\Test\UnitTest\Fixtures\Class1CircularDependencies': Dependencies: DI\Test\UnitTest\Fixtures\Class1CircularDependencies -> DI\Test\UnitTest\Fixtures\Class2CircularDependencies -> DI\Test\UnitTest\Fixtures\Class1CircularDependencies");
5656
$builder->useAttributes(true);
5757
$builder->build()->get(Class1CircularDependencies::class);
5858
}
@@ -64,7 +64,7 @@ public function circular_dependencies_with_attributes_throw_exceptions(Container
6464
public function circular_dependencies_because_of_self_alias_throw_exceptions(ContainerBuilder $builder)
6565
{
6666
$this->expectException(DependencyException::class);
67-
$this->expectExceptionMessage('Circular dependency detected while trying to resolve entry \'foo\'');
67+
$this->expectExceptionMessage("Circular dependency detected while trying to resolve entry 'foo': Dependencies: foo -> foo");
6868
$builder->addDefinitions([
6969
// Alias to itself -> infinite recursive loop
7070
'foo' => get('foo'),

tests/IntegrationTest/ContainerMakeTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public function testCircularDependencies(ContainerBuilder $builder)
7171
public function testCircularDependencyException(ContainerBuilder $builder)
7272
{
7373
$this->expectException(DependencyException::class);
74-
$this->expectExceptionMessage('Circular dependency detected while trying to resolve entry \'DI\Test\UnitTest\Fixtures\Class1CircularDependencies\'');
74+
$this->expectExceptionMessage('Circular dependency detected while trying to resolve entry \'DI\Test\UnitTest\Fixtures\Class1CircularDependencies\': Dependencies: DI\Test\UnitTest\Fixtures\Class1CircularDependencies -> DI\Test\UnitTest\Fixtures\Class2CircularDependencies -> DI\Test\UnitTest\Fixtures\Class1CircularDependencies');
7575
$builder->useAttributes(true);
7676
$container = $builder->build();
7777
$container->make(Class1CircularDependencies::class);
@@ -83,7 +83,7 @@ public function testCircularDependencyException(ContainerBuilder $builder)
8383
public function testCircularDependencyExceptionWithAlias(ContainerBuilder $builder)
8484
{
8585
$this->expectException(DependencyException::class);
86-
$this->expectExceptionMessage('Circular dependency detected while trying to resolve entry \'foo\'');
86+
$this->expectExceptionMessage('Circular dependency detected while trying to resolve entry \'foo\': Dependencies: foo -> foo');
8787
$builder->addDefinitions([
8888
// Alias to itself -> infinite recursive loop
8989
'foo' => \DI\get('foo'),

0 commit comments

Comments
 (0)