diff --git a/ModelDescriber/FormModelDescriber.php b/ModelDescriber/FormModelDescriber.php index 6262e89..15fd27a 100644 --- a/ModelDescriber/FormModelDescriber.php +++ b/ModelDescriber/FormModelDescriber.php @@ -147,7 +147,14 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry } if (($choices = $config->getOption('choices')) && is_array($choices) && count($choices)) { $enums = array_values($choices); - $type = $this->isNumbersArray($enums) ? 'number' : 'string'; + if ($this->isNumbersArray($enums)) { + $type = 'number'; + } elseif ($this->isBooleansArray($enums)) { + $type = 'boolean'; + } else { + $type = 'string'; + } + if ($config->getOption('multiple')) { $property->getItems()->setType($type)->setEnum($enums); } else { @@ -233,6 +240,22 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry return true; } + /** + * @param array $array + * + * @return bool true if $array contains only booleans, false otherwise + */ + private function isBooleansArray(array $array): bool + { + foreach ($array as $item) { + if (!is_bool($item)) { + return false; + } + } + + return true; + } + /** * @param ResolvedFormTypeInterface $type * diff --git a/Tests/Functional/Form/DummyType.php b/Tests/Functional/Form/DummyType.php index 0a8cc4a..453a191 100644 --- a/Tests/Functional/Form/DummyType.php +++ b/Tests/Functional/Form/DummyType.php @@ -26,6 +26,7 @@ class DummyType extends AbstractType { $builder->add('bar', TextType::class, ['required' => false]); $builder->add('foo', ChoiceType::class, ['choices' => ['male', 'female']]); + $builder->add('boo', ChoiceType::class, ['choices' => [true, false], 'required' => false]); $builder->add('foz', ChoiceType::class, ['choices' => ['male', 'female'], 'multiple' => true]); $builder->add('baz', CheckboxType::class, ['required' => false]); $builder->add('bey', IntegerType::class, ['required' => false]); diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index dbd2012..9db02d0 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -285,6 +285,10 @@ class FunctionalTest extends WebTestCase 'type' => 'string', 'enum' => ['male', 'female'], ], + 'boo' => [ + 'type' => 'boolean', + 'enum' => [true, false], + ], 'foz' => [ 'type' => 'array', 'items' => [