Обязательные формы для использования Entity от parent - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть две формы, одна из которых использует другую как 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, но эта денормализация удобна для других функций

...