1. Нужно создать модель, в конструктор которой должны передаваться все данные, на основании которых можно построить форму
1.1 У модели сделать магические методы, через которые как раз и можно будет обработать кастомное количество полей
2. Нужно создать класс формы, которая будет на основании этой модели генерировать форму:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$addFields = function (FormInterface $form, FormModel $model){
foreach ($model->getFields() as $field) {
$form->add($field->getName(), $field->getType(), $field->getOptions());
}
};
$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) use ($addFields) {
$data = $event->getData();
$form = $event->getForm();
$addFields($form, $data);
});
}
3. После сабмита этой формы, модель возвращает Entity, которую уже можно будет сохранить в БД.