Skip to content

Commit 4c651dc

Browse files
committed
Resolver::completeException() appends entity when type is not known
1 parent 49d404b commit 4c651dc

6 files changed

+23
-17
lines changed

src/DI/Resolver.php

+18-12
Original file line numberDiff line numberDiff line change
@@ -414,20 +414,26 @@ private function completeException(\Exception $e, Definition $def): ServiceCreat
414414
{
415415
if ($e instanceof ServiceCreationException && Strings::startsWith($e->getMessage(), "Service '")) {
416416
return $e;
417+
}
418+
419+
$name = $def->getName();
420+
$type = $def->getType();
421+
if ($name && !ctype_digit($name)) {
422+
$message = "Service '$name'" . ($type ? " (type of $type)" : '') . ': ';
423+
} elseif ($type) {
424+
$message = "Service of type $type: ";
425+
} elseif ($def instanceof Definitions\ServiceDefinition && $def->getEntity()) {
426+
$message = 'Service (' . $this->entityToString($def->getEntity()) . '): ';
417427
} else {
418-
$name = $def->getName();
419-
$type = $def->getType();
420-
if (!$type) {
421-
$message = "Service '$name': " . $e->getMessage();
422-
} elseif (!$name || ctype_digit($name)) {
423-
$message = "Service of type $type: " . str_replace("$type::", '', $e->getMessage());
424-
} else {
425-
$message = "Service '$name' (type of $type): " . str_replace("$type::", '', $e->getMessage());
426-
}
427-
return $e instanceof ServiceCreationException
428-
? $e->setMessage($message)
429-
: new ServiceCreationException($message, 0, $e);
428+
$message = '';
430429
}
430+
$message .= $type
431+
? str_replace("$type::", '', $e->getMessage())
432+
: $e->getMessage();
433+
434+
return $e instanceof ServiceCreationException
435+
? $e->setMessage($message)
436+
: new ServiceCreationException($message, 0, $e);
431437
}
432438

433439

tests/DI/Compiler.missingDefinition.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Assert::throws(function () {
1414
services:
1515
-
1616
');
17-
}, Nette\InvalidStateException::class, "Service '01': Factory and type are missing in definition of service.");
17+
}, Nette\InvalidStateException::class, "Factory and type are missing in definition of service.");
1818

1919

2020
Assert::throws(function () {

tests/DI/Definitions.AccessorDefinition.resolve.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Assert::exception(function () {
2828
$def = new AccessorDefinition;
2929
$resolver = new Nette\DI\Resolver(new Nette\DI\ContainerBuilder);
3030
$resolver->resolveDefinition($def);
31-
}, Nette\DI\ServiceCreationException::class, "Service '': Type of service is unknown.");
31+
}, Nette\DI\ServiceCreationException::class, "Type of service is unknown.");
3232

3333

3434
Assert::exception(function () {

tests/DI/Definitions.FactoryDefinition.resolve.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Assert::exception(function () {
2828
$def = new FactoryDefinition;
2929
$resolver = new Nette\DI\Resolver(new Nette\DI\ContainerBuilder);
3030
$resolver->resolveDefinition($def);
31-
}, Nette\DI\ServiceCreationException::class, "Service '': Type is missing in definition of service.");
31+
}, Nette\DI\ServiceCreationException::class, "Type is missing in definition of service.");
3232

3333

3434
Assert::exception(function () {

tests/DI/Definitions.ImportedDefinition.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Assert::exception(function () {
2323
$def = new ImportedDefinition;
2424
$resolver = new Nette\DI\Resolver(new Nette\DI\ContainerBuilder);
2525
$resolver->resolveDefinition($def);
26-
}, Nette\DI\ServiceCreationException::class, "Service '': Type of service is unknown.");
26+
}, Nette\DI\ServiceCreationException::class, "Type of service is unknown.");
2727

2828

2929
test('', function () {

tests/DI/Definitions.LocatorDefinition.resolve.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Assert::exception(function () {
3333
$def = new LocatorDefinition;
3434
$resolver = new Nette\DI\Resolver(new Nette\DI\ContainerBuilder);
3535
$resolver->resolveDefinition($def);
36-
}, Nette\DI\ServiceCreationException::class, "Service '': Type of service is unknown.");
36+
}, Nette\DI\ServiceCreationException::class, "Type of service is unknown.");
3737

3838

3939
test('', function () {

0 commit comments

Comments
 (0)