Как динамически добавить поле в форму?

В Symfony, динамическое добавление полей в форму можно реализовать с помощью форматера коллекции ("collection" field type). Этот форматер позволяет сгенерировать динамическое количество полей на основе заданного прототипа.

Для начала, создайте класс формы, используя FormBuilderInterface, и определите нужные поля. Для динамического добавления полей, определите поле коллекции, которое будет использоваться в качестве контейнера для новых полей. Параметр "entry_type" определяет прототип поля, которое будет использовано для каждого добавленного элемента. Например:

use SymfonyComponentFormExtensionCoreTypeCollectionType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;

class MyFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('dynamicFields', CollectionType::class, [
                'entry_type' => TextType::class,
                'allow_add' => true,
                'allow_delete' => true,
                'by_reference' => false,
            ]);
    }
}

В приведенном выше примере, dynamicFields - это поле коллекции, а TextType::class - это прототип поля, который будет использован для каждого добавленного элемента.

Теперь, в контроллере, создайте экземпляр класса формы и передайте его в функцию createView(). Затем передайте результат функции handleRequest() для обработки данных из запроса:

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;

class MyController extends AbstractController
{
    public function myAction(Request $request)
    {
        $form = $this->createForm(MyFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            // Обработка данных формы
        }

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

На шаблоне my_template.html.twig вы можете отобразить форму с помощью функции form():

{{ form(form) }}

Теперь, на странице отображаются вводимые поля, а пользователь может динамически добавлять или удалять их с помощью кнопок "Add" и "Remove".

Примечание: для правильной и безопасной обработки данных с помощью коллекции полей в Symfony, необходимо использовать JavaScript-библиотеку, такую как jQuery, для добавления и удаления полей динамически на фронтенде. Это гарантирует, что данные формы будут отправлены корректно.