From 309f935763f587920c5afb629d551d0ad4b9b22b Mon Sep 17 00:00:00 2001 From: Rob Holmes Date: Wed, 29 Aug 2018 22:14:19 +0100 Subject: [PATCH] Added support for Doctrine MongoDB ODM 'document' form type (#1377) * Added support for Doctrine MongoDB ODM 'document' form type * Simplify code --- ModelDescriber/FormModelDescriber.php | 6 ++++-- Tests/Functional/Form/DocumentType.php | 30 ++++++++++++++++++++++++++ Tests/Functional/Form/UserType.php | 3 +++ Tests/Functional/FunctionalTest.php | 16 +++++++++++++- 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 Tests/Functional/Form/DocumentType.php diff --git a/ModelDescriber/FormModelDescriber.php b/ModelDescriber/FormModelDescriber.php index 0cfbfd3..5f251cc 100644 --- a/ModelDescriber/FormModelDescriber.php +++ b/ModelDescriber/FormModelDescriber.php @@ -177,12 +177,14 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry break; } - if ('entity' === $blockPrefix) { + // The DocumentType is bundled with the DoctrineMongoDBBundle + if ('entity' === $blockPrefix || 'document' === $blockPrefix) { $entityClass = $config->getOption('class'); if ($config->getOption('multiple')) { $property->setFormat(sprintf('[%s id]', $entityClass)); $property->setType('array'); + $property->getItems()->setType('string'); } else { $property->setType('string'); $property->setFormat(sprintf('%s id', $entityClass)); @@ -223,7 +225,7 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry return null; } - if ('entity' === $type->getBlockPrefix()) { + if ('entity' === $type->getBlockPrefix() || 'document' === $type->getBlockPrefix()) { return $type; } diff --git a/Tests/Functional/Form/DocumentType.php b/Tests/Functional/Form/DocumentType.php new file mode 100644 index 0000000..e9b5b41 --- /dev/null +++ b/Tests/Functional/Form/DocumentType.php @@ -0,0 +1,30 @@ +setRequired('class'); + } + + public function getParent(): string + { + return ChoiceType::class; + } +} diff --git a/Tests/Functional/Form/UserType.php b/Tests/Functional/Form/UserType.php index 48e6028..c0c02f0 100644 --- a/Tests/Functional/Form/UserType.php +++ b/Tests/Functional/Form/UserType.php @@ -37,6 +37,9 @@ class UserType extends AbstractType ]) ->add('quz', DummyType::class, ['documentation' => ['type' => 'string', 'description' => 'User type.'], 'required' => false]) ->add('entity', EntityType::class, ['class' => 'Entity']) + ->add('entities', EntityType::class, ['class' => 'Entity', 'multiple' => true]) + ->add('document', DocumentType::class, ['class' => 'Document']) + ->add('documents', DocumentType::class, ['class' => 'Document', 'multiple' => true]) ->add('extended_builtin', ExtendedBuiltinType::class, ['required_option' => 'foo']); } diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index 5763c85..df52526 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -248,12 +248,26 @@ class FunctionalTest extends WebTestCase 'type' => 'string', 'format' => 'Entity id', ], + 'entities' => [ + 'type' => 'array', + 'format' => '[Entity id]', + 'items' => ['type' => 'string'], + ], + 'document' => [ + 'type' => 'string', + 'format' => 'Document id', + ], + 'documents' => [ + 'type' => 'array', + 'format' => '[Document id]', + 'items' => ['type' => 'string'], + ], 'extended_builtin' => [ 'type' => 'string', 'enum' => ['foo', 'bar'], ], ], - 'required' => ['dummy', 'dummies', 'entity', 'extended_builtin'], + 'required' => ['dummy', 'dummies', 'entity', 'entities', 'document', 'documents', 'extended_builtin'], ], $this->getModel('UserType')->toArray()); $this->assertEquals([