Symfony - 以嵌套形式检索未映射的字段

Symfony - retreive unmapped fields in nested forms

我有一个基于实体的 Symfony 类型 ItemType

class IpQuoteItemsType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('itemName', TextType::class, [
                'label' => 'Produktname'
            ])
            ...
            ->add('specialDiscount', PercentType::class, [
                'required' => false,
                'label' => 'Sonderrabatt',
                'mapped' => false,
                'attr' => [
                    'placeholder' => 'Sonderrabatt 0,00 %'
                ]
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => IpQuoteItems::class
        ));
    }

}

在最终形式中用作 CollectionType:

class IpQuotesType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        ...
        $builder->add('products', CollectionType::class, [
            'entry_type' => IpQuoteItemsType::class,
            'data' => $items
        ]);
    }

}

在任何情况下我都不会收到未映射的字段 specialDiscount。它在 ItemsType 的 PRE_SUBMIT 事件中仍然可用,但在最终形式 QuotesType.

的任何地方都找不到

是否可以在嵌套形式中提交未映射的数据?

您可以像这样在控制器中获取未映射的字段:

$form->get('nestedEntity')->get('fieldName')->getData()

我没有使用集合进行测试,但它在 OneToOne 关系中使用自定义类型。

希望对您有所帮助。