我有以下问题。名称为“user”的一个实体与实体“address”具有多对多的关系。我想创建一个表单“UserType”。在这种形式中,我将准确地展示实体。私有地址信息的一个地址和商业地址信息的一个地址。
我通过收藏实现了这一点,我可以添加和删除许多地址集合。
http://symfony.com/doc/current/cookbook/form/form_collections.html
但是,如何在没有集合的情况下创建或编辑用户时,如何准确显示两个地址实体?
答案 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
两种方法都有效。第二个更灵活,并且无需向用户对象添加其他方法。当然,你可能会想要那些方法。