Php Symfony-以嵌套形式检索未映射的字段
我有一个基于实体的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'
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()
的效果绝对不错。请注意,根据您的解决方案,我仍然需要首先访问阵列结果!