У меня есть две формы, одна из которых использует другую как CollectionType
:
class FooType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('company', EntityType::class, [
'class' => Company::class,
])
->add('ranges', CollectionType::class, [
'entry_type' => RangeType::class,
'entry_options' => ['label' => false],
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Foo::class,
'allow_extra_fields' => true,
'csrf_protection' => false,
]
);
}
}
class RangeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('min', Types\IntegerType::class)
->add('max', Types\IntegerType::class)
->add('company', EntityType::class, [
'class' => Company::class,
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Range::class,
'allow_extra_fields' => true,
'csrf_protection' => false,
]
);
}
}
Запрос данных:
$data = [
'name' => 'foo',
'company' => 2,
'ranges' => [
[
'min' => 1,
'max' => 35,
'company' => 2, // <-- the element I would like to get rid of as it is already present level higher
],
[
'min' => 40,
'max' => 70,
'company' => 2,
],
[
'min' => 71,
'max' => 90,
'company' => 2,
],
],
];
Этоможно связать company
из RangeType
с company
из FooType
, так что пропуск company
в ranges
не требуется?Я мог бы изменить данные запроса, однако должен быть лучший способ ...
PS Я мог бы вообще удалить company
из Range
, но эта денормализация удобна для других функций