两个没有集合的实体

时间:2015-01-07 13:16:17

标签: symfony

我有以下问题。名称为“user”的一个实体与实体“address”具有多对多的关系。我想创建一个表单“UserType”。在这种形式中,我将准确地展示实体。私有地址信息的一个地址和商业地址信息的一个地址。

我通过收藏实现了这一点,我可以添加和删除许多地址集合。

http://symfony.com/doc/current/cookbook/form/form_collections.html

但是,如何在没有集合的情况下创建或编辑用户时,如何准确显示两个地址实体?

1 个答案:

答案 0 :(得分:1)

有几种方法。一种是将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

两种方法都有效。第二个更灵活,并且无需向用户对象添加其他方法。当然,你可能会想要那些方法。