При редактировании существующей "сущности" значение моего расширенного ChoiceType не отправляется правильно, когда я отправляю форму (handleRequest()
): $ request содержит правильные значения, но $ form-> getData () don«т.Другими словами, если в этом поле уже установлено значение по умолчанию, я не могу его обновить.
Я на Symfony 3.4.15 , на клиентском приложении, котороесвязывается с API. У меня нет никаких объектов на этой стороне , я просто получаю ресурсы по API и работаю с массивами.
У меня нет проблем с проверкой формы.Чтобы убедиться, что это работает хорошо, я попытался определить значение, которое не существует, в опции «выбор», и там у меня есть ошибка.
Я уже нашел способ понять эту проблему, установивопция «данные» в false.Это устраняет проблему при отправке значений, но я больше не восстанавливаю исходное значение при инициализации формы.
Здесь моя форма:
//OrdersItemsType class
public function buildForm(FormBuilderInterface $builder, array $options
{
$builder
->add('type', ChoiceType::class, [
'label' => 'label.type',
'choices' => [
'label.total' => 'total',
'label.simple_partial' => 'simple_partial',
'label.complex_partial' => 'complex_partial'
],
'expanded' => true,
'multiple' => false,
'empty_data' => 'total' //comment or uncomment this line don't change anything
])
;
}
public function getBlockPrefix()
{
return 'form_name';
}
Здесь строки, когда я отправляюform:
dump($customFormData);
$form = $this->createForm(OrdersItemsType::class, $customFormData, [
'method' => 'PATCH'
]);
if ($request->isMethod('PATCH') && $form->handleRequest($request)->isValid()) {
dump($request->request->all());
dump($form->getData());
exit;
}
Вот дамп $ customFormData:
array:2 [
"form_name" => [
"type" => "simple_partial"
]
]
Вот дамп $ request-> request-> all ():
array:2 [
"_method" => "PATCH"
"form_name" => [
"_token" => "my_valid_token"
"type" => "complex_partial"
]
]
А вот дамп $ form-> getData ():
array:2 [
"form_name" => [
"type" => "simple_partial"
]
]
Я ожидаю получить значения $customFormData
(действительные значения моей сущности), когда я инициализирую форму для ее предварительного заполнения, ичтобы получить значения $request
при отправке формы (точно так же, как форма должна работать, и это отлично работает в других полях), но я на самом деле не могу обновить этот расширенный ChoicesType.
Редактировать: После дополнительного теста я могу сказать, что:
- Если
type
изначально "total"
, я не могу его изменить вообще. - Если
type
изначально "simple_partial"
, я могу изменить его на "total"
, но не на "complex_partial"
. - Если
type
изначально "complex_partial"
, я могу изменить его на "total"
и "simple_partial"
.
_
Edit2: после дальнейших тестов я вижу, что порядок выбора в ChoiceType влияет на значение, которое я могу изменить: Конкретно, я не могу изменить тип, если значение, которое я отправляю, ниже текущего значения в списке вариантов.