provide a useful message when extension types don't match
This commit is contained in:
parent
1bc3ee798d
commit
88d836643a
@ -53,7 +53,7 @@ class DependencyInjectionExtension implements FormExtensionInterface
|
|||||||
$extensions = [];
|
$extensions = [];
|
||||||
|
|
||||||
if (isset($this->typeExtensionServices[$name])) {
|
if (isset($this->typeExtensionServices[$name])) {
|
||||||
foreach ($this->typeExtensionServices[$name] as $serviceId => $extension) {
|
foreach ($this->typeExtensionServices[$name] as $extension) {
|
||||||
$extensions[] = $extension;
|
$extensions[] = $extension;
|
||||||
|
|
||||||
if (method_exists($extension, 'getExtendedTypes')) {
|
if (method_exists($extension, 'getExtendedTypes')) {
|
||||||
@ -68,7 +68,7 @@ class DependencyInjectionExtension implements FormExtensionInterface
|
|||||||
|
|
||||||
// validate the result of getExtendedTypes()/getExtendedType() to ensure it is consistent with the service definition
|
// validate the result of getExtendedTypes()/getExtendedType() to ensure it is consistent with the service definition
|
||||||
if (!\in_array($name, $extendedTypes, true)) {
|
if (!\in_array($name, $extendedTypes, true)) {
|
||||||
throw new InvalidArgumentException(sprintf('The extended type specified for the service "%s" does not match the actual extended type. Expected "%s", given "%s".', $serviceId, $name, implode(', ', $extendedTypes)));
|
throw new InvalidArgumentException(sprintf('The extended type "%s" specified for the type extension class "%s" does not match any of the actual extended types (["%s"]).', $name, \get_class($extension), implode('", "', $extendedTypes)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,8 @@ class DependencyInjectionExtensionTest extends TestCase
|
|||||||
public function testThrowExceptionForInvalidExtendedType()
|
public function testThrowExceptionForInvalidExtendedType()
|
||||||
{
|
{
|
||||||
$this->expectException('Symfony\Component\Form\Exception\InvalidArgumentException');
|
$this->expectException('Symfony\Component\Form\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage(sprintf('The extended type "unmatched" specified for the type extension class "%s" does not match any of the actual extended types (["test"]).', TestTypeExtension::class));
|
||||||
|
|
||||||
$extensions = [
|
$extensions = [
|
||||||
'unmatched' => new \ArrayIterator([new TestTypeExtension()]),
|
'unmatched' => new \ArrayIterator([new TestTypeExtension()]),
|
||||||
];
|
];
|
||||||
|
Reference in New Issue
Block a user