У меня есть ColletionType
из EditType
форм, которые предназначены для каждого редактирования текстового содержимого объекта Alert.Я почти получил его, но при отправке EditType
одного оповещения отправляется остальное, а null
передается для содержимого.
Тип коллекции collectiontype
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('alerts', CollectionType::class,
[
'entry_type' => EditAlertType::class,
'entry_options' => ['label' => false],
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => AlertManager::class
]);
}
Theтип встроенной формы
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('content', TextType::class, ['required' => true]);
$builder
->add('edit', SubmitType::class,
array
(
'label' => 'Save changes',
'attr' => ['class' => 'btn btn-primary']
))
;
}
public function configureOptions (OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Alert::class
]);
}
код контроллера
$editForm = $this->createForm(AlertActionType::class, $alertManager);
$editForm->handleRequest($request);
foreach ($editForm->get('alerts') as $editAlertForm) {
$alertId = $editAlertForm->getData()->getId();
if ($editAlertForm->isSubmitted()) {
//both this if statement and the isClicked() block run. However, the isClicked() is only ran for the form I want to handle, while this is ran for each embedded form
}
if ($editAlertForm->get('edit')->isClicked() and $$editAlertForm->isValid()) {
$content = $$editAlertForm->get('content')->getData();
$this->editAlertAction($request, $alertId, $content);
}
}