Это будет выглядеть так:
строитель в классе с коллекцией самолетов:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('planes', CollectionType::class, array(
'entry_type' => PlaneType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,// this will call get/set of your entity
'prototype' => true, // is needed coz there will be 2 prototypes
'prototype_name'=> '__planes__'//1-st prototype name
));
}
строитель в классе PlaneType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('speed');
$builder->add('weight');
$builder->add('color');
$builder->add('engines', CollectionType::class, array(
'entry_type' => EngineType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,// this will call get/set of your entity
'prototype' => true, // is needed coz there will be 2 prototypes
'prototype_name'=> '__engines__'//2 -nd prototype
));
}
строитель в классе EngineType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('rpm');
$builder->add('fuel_type');
$builder->add('weight');
}
Также вы должны добавить некоторый javascript для динамического добавления / удаления полей, во время добавления вы должны обмениваться именами прототипов с идентификатором количества полей.