【问题标题】:Symfony - retreive unmapped fields in nested formsSymfony - 以嵌套形式检索未映射的字段
【发布时间】:2020-03-24 10:17:00
【问题描述】:

我有一个基于实体的 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 中的任何地方都找不到。

是否可以以嵌套形式汇总未映射的数据?

【问题讨论】:

  • 是的,我刚刚在本地测试了 Symfony 2.8。不知道为什么会发生这种情况,您可以尝试在控制器操作开始时转储请求数据并查看它是否存在?
  • 谢谢。奇怪的是,它确实在 $request 中,但似乎$form->handleRequest($request) 将提交的数据转换为项目对象,因此丢失了未映射的字段。我想我会从请求变量中挑选它们,但它似乎不对......

标签: php symfony formbuilder


【解决方案1】:

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

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

我不使用集合进行测试,但它适用于 OneToOne 关系中的 customType。

希望对您有所帮助。

【讨论】:

  • 您,先生,绝对是个天才,绝对正确。虽然$form->getData() 没有给我任何结果,但$form->get('products')[$arrayIndex]->get('specialDiscount')->getData() 绝对像魅力一样工作。请注意,与您的解决方案相反,我仍然需要先访问结果数组!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2020-10-25
  • 2018-06-03
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多