Make failed autowiring error messages more explicit
This commit is contained in:
parent
c86a1a145a
commit
6894e03e16
@ -271,7 +271,7 @@ class AutowirePass implements CompilerPassInterface
|
|||||||
|
|
||||||
if (!$typeHint->isInstantiable()) {
|
if (!$typeHint->isInstantiable()) {
|
||||||
$classOrInterface = $typeHint->isInterface() ? 'interface' : 'class';
|
$classOrInterface = $typeHint->isInterface() ? 'interface' : 'class';
|
||||||
throw new RuntimeException(sprintf('Unable to autowire argument of type "%s" for the service "%s". No services were found matching this %s.', $typeHint->name, $id, $classOrInterface));
|
throw new RuntimeException(sprintf('Unable to autowire argument of type "%s" for the service "%s". No services were found matching this %s and it cannot be auto-registered.', $typeHint->name, $id, $classOrInterface));
|
||||||
}
|
}
|
||||||
|
|
||||||
$argumentId = sprintf('autowired.%s', $typeHint->name);
|
$argumentId = sprintf('autowired.%s', $typeHint->name);
|
||||||
@ -280,7 +280,14 @@ class AutowirePass implements CompilerPassInterface
|
|||||||
$argumentDefinition->setPublic(false);
|
$argumentDefinition->setPublic(false);
|
||||||
|
|
||||||
$this->populateAvailableType($argumentId, $argumentDefinition);
|
$this->populateAvailableType($argumentId, $argumentDefinition);
|
||||||
$this->completeDefinition($argumentId, $argumentDefinition);
|
|
||||||
|
try {
|
||||||
|
$this->completeDefinition($argumentId, $argumentDefinition);
|
||||||
|
} catch (\RuntimeException $e) {
|
||||||
|
$classOrInterface = $typeHint->isInterface() ? 'interface' : 'class';
|
||||||
|
$message = sprintf('Unable to autowire argument of type "%s" for the service "%s". No services were found matching this %s and it cannot be auto-registered.', $typeHint->name, $id, $classOrInterface);
|
||||||
|
throw new RuntimeException($message, 0, $e);
|
||||||
|
}
|
||||||
|
|
||||||
return new Reference($argumentId);
|
return new Reference($argumentId);
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
||||||
* @expectedExceptionMessage Unable to autowire argument of type "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" for the service "a". No services were found matching this interface.
|
* @expectedExceptionMessage Unable to autowire argument of type "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" for the service "a". No services were found matching this interface and it cannot be auto-registered.
|
||||||
*/
|
*/
|
||||||
public function testTypeNotGuessableNoServicesFound()
|
public function testTypeNotGuessableNoServicesFound()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user