Как сохранить форму, в которую встроена коллекция другой формы?

Для сохранения формы, в которую встроена коллекция другой формы, в Symfony, вам потребуется выполнить несколько шагов.

1. Создайте основную форму, которая будет содержать коллекцию других форм. Для этого вам понадобится использовать класс CollectionType, предоставляемый Symfony.

use SymfonyComponentFormExtensionCoreTypeCollectionType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormExtensionCoreTypeTextType;

// ...

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('collection', CollectionType::class, [
            'entry_type' => YourEmbeddedFormType::class, // Замените на ваш класс формы, который будет встроен в коллекцию
            'allow_add' => true,
            'allow_delete' => true,
            'by_reference' => false,
        ])
        ->add('save', SubmitType::class, ['label' => 'Сохранить']);
}

2. Создайте класс для встроенной формы (в данном примере назван YourEmbeddedFormType), который будет содержать все необходимые поля для этой формы.

use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;

// ...

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('field1', TextType::class)
        ->add('field2', TextType::class)
        // и так далее, добавьте все необходимые поля
    ;
}

3. Создайте контроллер для обработки отправленной формы. Вам потребуется получить данные формы из запроса (Request) и выполнить процедуру проверки и сохранения данных.

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingAnnotationRoute;

class YourController extends AbstractController
{
    /**
     * @Route("/your-route", name="your_route")
     */
    public function yourAction(Request $request)
    {
        $form = $this->createForm(YourMainFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $data = $form->getData();

            // Здесь можно выполнить сохранение данных или другие необходимые действия

            return $this->redirectToRoute('your_success_route');
        }

        return $this->render('your_template.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

4. Создайте шаблон для рендеринга формы (your_template.html.twig), в котором вы можете отобразить форму с помощью переменной form:

<form method="post" action="{{ path('your_route') }}">
    {{ form_row(form.collection) }}

    <button type="submit">Сохранить</button>
</form>

5. Создайте шаблон для успешного завершения действия (your_success_template.html.twig), который будет отображаться после успешного сохранения данных, и содержит только информацию об успешном сохранении или переход на другую страницу, в зависимости от ваших требований.

<h1>Данные успешно сохранены!</h1>

Теперь у вас есть подробная инструкция по сохранению формы, в которую встроена коллекция других форм, с использованием Symfony. Вы можете настроить и доработать этот пример под свои требования, добавив или изменив поля формы и дополнив сохранением данных соответствующим образом.