Вы можете исправить класс Form напрямую, как предложено здесь: https://github.com/symfony/symfony/issues/17799#issuecomment -184473725
Единственная проблема: как сделать это изменение постоянным для вашего проекта?
В итоге я создал патч для класса формы. На Linux и предположим, что вы используете git, он работает примерно так:
Откройте терминал в вашем проекте root каталог
Добавьте класс формы в ваш git репозиторий
git add vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
Патч класса формы, как описано выше
Создание патча
git diff > form.patch
Удалить класс формы из вас git хранилище
git rm --cached vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
Каким-то образом включить исправление в процесс обновления вашего проекта. Для своего проекта я написал небольшой скрипт, который запускается после каждого composer install
или composer update
.
#!/bin/sh
# apply form component patch to fix HTTP PATCH issue with ChoiceType
# run after composer install/update
patch -p1 -N -r /dev/null < form.patch
Параметры команды исправления выбраны так, что взаимодействия не будет или другие побочные эффекты в случае, если патч уже был применен.
form.patch выглядит примерно так:
diff --git a/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php b/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
index 67fd234f..27ed9e81 100644
--- a/www/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
+++ b/www/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
@@ -553,6 +553,10 @@ class Form implements \IteratorAggregate, FormInterface
$submittedData = $event->getData();
}
+ // HTTP PATCH fix for ChoiceType
+ // https://github.com/symfony/symfony/issues/17799#issuecomment-184473725
+ $clearMissing = $this->getConfig()->getOption('expanded', false) ?: $clearMissing;
+
// Check whether the form is compound.
// This check is preferable over checking the number of children,
// since forms without children may also be compound.