diff --git a/ModelDescriber/FormModelDescriber.php b/ModelDescriber/FormModelDescriber.php index 74e3370..3cbebf8 100644 --- a/ModelDescriber/FormModelDescriber.php +++ b/ModelDescriber/FormModelDescriber.php @@ -225,7 +225,15 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry do { $class = get_class($type->getInnerType()); - if (FormType::class !== $class && 0 === strpos($class, 'Symfony\Component\Form\Extension\Core\Type\\')) { + if (FormType::class === $class) { + return null; + } + + if ('entity' === $type->getBlockPrefix()) { + return $type; + } + + if (0 === strpos($class, 'Symfony\Component\Form\Extension\Core\Type\\')) { return $type; } } while ($type = $type->getParent()); diff --git a/Tests/Functional/Form/EntityType.php b/Tests/Functional/Form/EntityType.php new file mode 100644 index 0000000..c50de22 --- /dev/null +++ b/Tests/Functional/Form/EntityType.php @@ -0,0 +1,31 @@ +setDefault('multiple', false) + ->setRequired('class'); + } + + public function getParent(): string + { + return ChoiceType::class; + } +} diff --git a/Tests/Functional/Form/UserType.php b/Tests/Functional/Form/UserType.php index f829eee..48e6028 100644 --- a/Tests/Functional/Form/UserType.php +++ b/Tests/Functional/Form/UserType.php @@ -36,6 +36,7 @@ class UserType extends AbstractType 'required' => false, ]) ->add('quz', DummyType::class, ['documentation' => ['type' => 'string', 'description' => 'User type.'], 'required' => false]) + ->add('entity', EntityType::class, ['class' => 'Entity']) ->add('extended_builtin', ExtendedBuiltinType::class, ['required_option' => 'foo']); } diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index b17decf..e53274b 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -243,12 +243,16 @@ class FunctionalTest extends WebTestCase 'type' => 'string', 'description' => 'User type.', ], + 'entity' => [ + 'type' => 'string', + 'format' => 'Entity id', + ], 'extended_builtin' => [ 'type' => 'string', 'enum' => ['foo', 'bar'], ], ], - 'required' => ['dummy', 'dummies', 'extended_builtin'], + 'required' => ['dummy', 'dummies', 'entity', 'extended_builtin'], ], $this->getModel('UserType')->toArray()); $this->assertEquals([