Данная форма:
...
$builder
->add('testArray', ChoiceType::class, [
'choices' => ['ROLE_ADMIN' => 'ROLE_ADMIN', 'ROLE_USER' => 'ROLE_USER'],
'expanded' => true,
'multiple' => true
])
;
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => TestEntity::class,
'csrf_protection' => false,
'method' => 'PATCH'
]);
}
...
И сущность:
...
/**
* @ORM\Column(type="simple_array", nullable=true)
*/
private $testArray = [];
public function getTestArray(): ?array
{
return $this->testArray;
}
public function setTestArray(?array $testArray): self
{
$this->testArray = $testArray;
return $this;
}
...
При отправке формы путем добавления значений ... все работает отлично.
Но при удалении значений ... значения не удаляются, и установщик никогда не вызывается.
Странно, переключение метода формы на GET исправляет это.
Что происходит?
--- редактировать ---
Вот контроллер, который воспроизводит эту проблему:
/**
* @Route("/{id}/edit", name="test_entity_edit", methods={"GET","POST","PATCH"})
*/
public function edit(Request $request, TestEntity $testEntity): Response
{
$form = $this->createForm(TestEntityType::class, $testEntity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('test_entity_index', [
'id' => $testEntity->getId(),
]);
}
return $this->render('test_entity/edit.html.twig', [
'test_entity' => $testEntity,
'form' => $form->createView(),
]);
}
---- редактировать ----
Тестирование с использованием POST это работает отлично. Но с помощью PATCH это не удается. Все остальные поля обновляются. И добавление в массив работает. Но удаление из массива не делает. Я добавил соответствующий код PATCH выше и обновил заголовок, чтобы прояснить вопрос.