Существует несколько подходов к нему. Один из них заключается в том, чтобы добавить get/set методы privateAddress и businessAddress в пользовательский объект, а затем убедиться, что вы инициализируете коллекции. Что-то вроде:
$user = new User();
$user->addAddress(new Address('Private'));
$user->addAddress(new Address('Business'));
$builder = $this->createFormBuilder($user);
$builder
->add('privateAddress', new AddressFormType())
->add('businessAddress', new AddressFormType())
;
Я часто использую второй подход при создании объекта с несколькими дочерними элементами. В этом подходе вы кормите форму несколькими независимыми объектами в массиве, а затем складываете вещи вместе после публикации формы.
$data = array(
'user' => new User(),
'privateAddress' => new Address('Private'),
'businessAddress' => new Address('Business'),
);
$builder = $this->createFormBuilder($data);
$builder
->add('user', new UserFormType())
->add('privateAddress', new AddressFormType())
->add('businessAddress', new AddressFormType())
;
...
if ($form->isValid())
// Stitch your object together then persist
Любой способ работы. Второй вариант является более гибким и позволяет избежать необходимости добавлять дополнительные методы к объекту пользователя. Конечно, вы, вероятно, захотите эти методы в любом случае.
Спасибо много @cerad, это решит мою проблему – smartcoderx