Не поймите, почему расширенное значение ChoiceType отправлено неправильно - PullRequest
0 голосов
/ 10 апреля 2019

При редактировании существующей "сущности" значение моего расширенного 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 влияет на значение, которое я могу изменить: Конкретно, я не могу изменить тип, если значение, которое я отправляю, ниже текущего значения в списке вариантов.

1 Ответ

0 голосов
/ 15 апреля 2019

Наконец, из-за нехватки времени я отказался от ChoiceType ['expanded' => true] (переключатели) для простого ChoiceType (выберите список), и это решает проблему.

У меня нет объяснения первоначальной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...