From 22d561f4f06aee41de0b6ba276da2d9a1faa9272 Mon Sep 17 00:00:00 2001 From: Peter Gribanov Date: Tue, 23 Jan 2018 14:56:35 +0300 Subject: [PATCH 1/3] check empty data in choices --- .../Component/Form/Extension/Core/Type/ChoiceType.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php index d9df942c6af30..c20b5035d7ba6 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php @@ -91,7 +91,13 @@ public function buildForm(FormBuilderInterface $builder, array $options) $emptyData = $form->getConfig()->getEmptyData(); if (false === FormUtil::isEmpty($emptyData) && array() !== $emptyData) { - $data = is_callable($emptyData) ? call_user_func($emptyData, $form, $data) : $emptyData; + if (!is_callable($emptyData) || ( + is_scalar($emptyData) && array_key_exists($emptyData, $form->getConfig()->getOption('choices')) + )) { + $data = $emptyData; + } else { + $data = call_user_func($emptyData, $form, $data); + } } } From 985dc6a70d80f16d9adcf5f0ccf85e76f017691a Mon Sep 17 00:00:00 2001 From: Peter Gribanov Date: Tue, 23 Jan 2018 15:46:55 +0300 Subject: [PATCH 2/3] search empty_data in choices keys and values --- src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php index c20b5035d7ba6..6adb0c5bf2ac3 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php @@ -92,7 +92,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) if (false === FormUtil::isEmpty($emptyData) && array() !== $emptyData) { if (!is_callable($emptyData) || ( - is_scalar($emptyData) && array_key_exists($emptyData, $form->getConfig()->getOption('choices')) + array_key_exists($emptyData, $form->getConfig()->getOption('choices')) || + false !== array_search($emptyData, $form->getConfig()->getOption('choices')) )) { $data = $emptyData; } else { From 626f5877c8868f38c7c2b8056d51cc093dd702df Mon Sep 17 00:00:00 2001 From: Peter Gribanov Date: Tue, 23 Jan 2018 16:16:29 +0300 Subject: [PATCH 3/3] array_key_exists and in_array can't use Closure as a first value --- .../Component/Form/Extension/Core/Type/ChoiceType.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php index 6adb0c5bf2ac3..ca8f2883492cb 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php @@ -91,10 +91,10 @@ public function buildForm(FormBuilderInterface $builder, array $options) $emptyData = $form->getConfig()->getEmptyData(); if (false === FormUtil::isEmpty($emptyData) && array() !== $emptyData) { - if (!is_callable($emptyData) || ( + if (!is_callable($emptyData) || (is_scalar($emptyData) && ( array_key_exists($emptyData, $form->getConfig()->getOption('choices')) || - false !== array_search($emptyData, $form->getConfig()->getOption('choices')) - )) { + in_array($emptyData, $form->getConfig()->getOption('choices')) + ))) { $data = $emptyData; } else { $data = call_user_func($emptyData, $form, $data);