CollectionType отправляет все встроенные формы, только хочу отправить один - PullRequest
0 голосов
/ 09 марта 2019

У меня есть 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);
        }
    }
...