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

Php Symfony-以嵌套形式检索未映射的字段,php,symfony,formbuilder,Php,Symfony,Formbuilder,我有一个基于实体的Symfony类型ItemType class IpQuoteItemsType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('itemName', TextType::class, [ 'label'

我有一个基于实体的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
        ]);
    }

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


是否可以在嵌套表单中使用未映射的数据?

您可以在控制器中获得如下未映射字段:

$form->get('nestedEntity')->get('fieldName')->getData()
我不使用collection进行测试,但它使用的是OneToOne关系中的customType


希望有帮助。

是的,我刚刚在本地测试了Symfony 2.8。不知道为什么会发生这种情况,您可以尝试在控制器操作开始时转储请求数据,看看它是否存在吗?谢谢。奇怪的是,它确实在$request中,但似乎
$form->handleRequest($request)
将提交的数据转换为Item对象,从而释放了未映射的字段。我想我会从请求变量中选择它们,但这似乎不对……先生,你是一个绝对的天才,绝对正确。虽然
$form->getData()
没有给我任何结果,
$form->get('products')[$arrayIndex]->get('specialDiscount')->getData()
的效果绝对不错。请注意,根据您的解决方案,我仍然需要首先访问阵列结果!