Added support for Doctrine MongoDB ODM 'document' form type (#1377)

* Added support for Doctrine MongoDB ODM 'document' form type

* Simplify code
This commit is contained in:
Rob Holmes 2018-08-29 22:14:19 +01:00 committed by Guilhem N
parent 63cee64e6b
commit 309f935763
4 changed files with 52 additions and 3 deletions

View File

@ -177,12 +177,14 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry
break; break;
} }
if ('entity' === $blockPrefix) { // The DocumentType is bundled with the DoctrineMongoDBBundle
if ('entity' === $blockPrefix || 'document' === $blockPrefix) {
$entityClass = $config->getOption('class'); $entityClass = $config->getOption('class');
if ($config->getOption('multiple')) { if ($config->getOption('multiple')) {
$property->setFormat(sprintf('[%s id]', $entityClass)); $property->setFormat(sprintf('[%s id]', $entityClass));
$property->setType('array'); $property->setType('array');
$property->getItems()->setType('string');
} else { } else {
$property->setType('string'); $property->setType('string');
$property->setFormat(sprintf('%s id', $entityClass)); $property->setFormat(sprintf('%s id', $entityClass));
@ -223,7 +225,7 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry
return null; return null;
} }
if ('entity' === $type->getBlockPrefix()) { if ('entity' === $type->getBlockPrefix() || 'document' === $type->getBlockPrefix()) {
return $type; return $type;
} }

View File

@ -0,0 +1,30 @@
<?php
/*
* This file is part of the NelmioApiDocBundle package.
*
* (c) Nelmio
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Nelmio\ApiDocBundle\Tests\Functional\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class DocumentType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setRequired('class');
}
public function getParent(): string
{
return ChoiceType::class;
}
}

View File

@ -37,6 +37,9 @@ class UserType extends AbstractType
]) ])
->add('quz', DummyType::class, ['documentation' => ['type' => 'string', 'description' => 'User type.'], 'required' => false]) ->add('quz', DummyType::class, ['documentation' => ['type' => 'string', 'description' => 'User type.'], 'required' => false])
->add('entity', EntityType::class, ['class' => 'Entity']) ->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']); ->add('extended_builtin', ExtendedBuiltinType::class, ['required_option' => 'foo']);
} }

View File

@ -248,12 +248,26 @@ class FunctionalTest extends WebTestCase
'type' => 'string', 'type' => 'string',
'format' => 'Entity id', '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' => [ 'extended_builtin' => [
'type' => 'string', 'type' => 'string',
'enum' => ['foo', 'bar'], 'enum' => ['foo', 'bar'],
], ],
], ],
'required' => ['dummy', 'dummies', 'entity', 'extended_builtin'], 'required' => ['dummy', 'dummies', 'entity', 'entities', 'document', 'documents', 'extended_builtin'],
], $this->getModel('UserType')->toArray()); ], $this->getModel('UserType')->toArray());
$this->assertEquals([ $this->assertEquals([