OrderingCompany と FinalUser の 2 つの (複合) フィールドで注文フォームを作成する必要があります。これらのフィールドは両方とも、独自の型で表すことができます (必須ではありません)。
以下の例では、手っ取り早いので、手動でフォームを作成します。あなたがすることを禁じるものは何もありませんフィールドの構造を別の型に抽出します。
<?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
))
;
}
}