【发布时间】: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