From f0b1eb78491a50416e7109d8afcdbbd3ad0ee063 Mon Sep 17 00:00:00 2001 From: eaunitrust Date: Thu, 30 Aug 2018 00:16:19 +0200 Subject: [PATCH] master: RepeatedType added (#1387) * master: RepeatedType added * Fix RepeatedType support --- ModelDescriber/FormModelDescriber.php | 22 ++++++++++++++++++++++ Tests/Functional/Form/DummyType.php | 7 +++++++ Tests/Functional/FunctionalTest.php | 16 +++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/ModelDescriber/FormModelDescriber.php b/ModelDescriber/FormModelDescriber.php index 5f251cc..6262e89 100644 --- a/ModelDescriber/FormModelDescriber.php +++ b/ModelDescriber/FormModelDescriber.php @@ -164,6 +164,28 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry break; } + if ('password' === $blockPrefix) { + $property->setType('string'); + $property->setFormat('password'); + + break; + } + + if ('repeated' === $blockPrefix) { + $property->setType('object'); + $property->setRequired([$config->getOption('first_name'), $config->getOption('second_name')]); + $subType = $config->getOption('type'); + + foreach (['first', 'second'] as $subField) { + $subName = $config->getOption($subField.'_name'); + $subForm = $this->formFactory->create($subType, null, array_merge($config->getOption('options'), $config->getOption($subField.'_options'))); + + $this->findFormType($subForm->getConfig(), $property->getProperties()->get($subName)); + } + + break; + } + if ('collection' === $blockPrefix) { $subType = $config->getOption('entry_type'); $subOptions = $config->getOption('entry_options'); diff --git a/Tests/Functional/Form/DummyType.php b/Tests/Functional/Form/DummyType.php index df1566e..de658d6 100644 --- a/Tests/Functional/Form/DummyType.php +++ b/Tests/Functional/Form/DummyType.php @@ -15,6 +15,8 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; +use Symfony\Component\Form\Extension\Core\Type\RepeatedType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; @@ -27,5 +29,10 @@ class DummyType extends AbstractType $builder->add('foz', ChoiceType::class, ['choices' => ['male', 'female'], 'multiple' => true]); $builder->add('baz', CheckboxType::class, ['required' => false]); $builder->add('bey', IntegerType::class, ['required' => false]); + $builder->add('password', RepeatedType::class, [ + 'type' => PasswordType::class, + 'first_name' => 'first_field', + 'required' => true + ]); } } diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index df52526..36e8add 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -293,8 +293,22 @@ class FunctionalTest extends WebTestCase 'bey' => [ 'type' => 'integer', ], + 'password' => [ + 'type' => 'object', + 'required' => ['first_field', 'second'], + 'properties' => [ + 'first_field' => [ + 'type' => 'string', + 'format' => 'password', + ], + 'second' => [ + 'type' => 'string', + 'format' => 'password', + ], + ], + ], ], - 'required' => ['foo', 'foz'], + 'required' => ['foo', 'foz', 'password'], ], $this->getModel('DummyType')->toArray()); }