您应该使用两个(复合)字段构造 Order 表单:OrderingCompany 和 FinalUser。这两个字段都可以用它们自己的类型表示(但这不是强制性的)。
在下面的示例中,我将快速而肮脏,我将手动构建表格。没有什么禁止你将字段的构造提取到单独的类型。
<?php
class Order extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('orderdata') // orderdata should exist on order entity
->add('finalUser', new FinalUserType)
// same with OrderingCompany
;
}
public function getName()
{
return 'order';
}
}
class FinalUserType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array('data_class' => 'FinalUser'));
}
}
选项 2
还有另一种可能性:使用属性路径将表单字段直接映射到实体图的基础对象(假设您的图具有正确的实例):
<?php
class Order extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('orderdata') // orderdata should exist on order entity
->add('finalUserName', 'text', array(
'property_path' => 'finalUser.name' // $order->getFinalUser()->(get|set)Name() will be called
))
;
}
}