我正在用Symfony 4.5中的orderItems(集合)之类的嵌入式数据创建订单表单。我的OrderType看起来像这样:
<?php
class OrderType extends BaseOrderType
{
/**
* {@inheritDoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('note', TextareaType::class, array(
'label' => 'order.note_company',
'required' => false,
));
$builder->add('orderItems', CollectionType::class, array(
'entry_type' => OrderItemType::class,
'entry_options' => array(
'label' => false
),
'allow_add' => true,
'prototype_data' => new OrderItem()
));
}
/**
* {@inheritDoc}
*/
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(array(
'data_class' => Order::class,
'translation_domain' => 'forms',
));
}
}
对于我的嵌入式表单OrderItemType
<?php
class OrderItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('amount', IntegerType::class, array(
'label' => 'order.amount',
'attr' => array(
'min' => 0,
),
'data' => 1,
'required' => false,
));
$builder->add('configureProductType', ConfigureProductType::class, array(
'label' => false,
'show_submit_btn' => false,
'required' => false,
));
}
/**
* {@inheritDoc}
*/
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(array(
'data_class' => OrderItem::class,
'translation_domain' => 'forms',
'allow_extra_fields' => true
));
}
}
[OrderItemType包含一个字段configureProductType,它也是具有可重用字段(例如产品,价格等)的表单。但是如何将该字段configureProductType映射回原始OrderItemType。
您正在寻找inherit_data
option。 symfony文档对此进行了详细说明,但是您需要为嵌套表单类型将inherit_data
选项设置为inherit_data
:
true