2015-01-07 2 views
1

У меня есть следующая проблема. Один объект с именем «пользователь» имеет отношение «многие» к «сущности» объекта. Я хотел бы создать форму «UserType». В этой форме я точно покажу адрес объектов. Один адрес для приватной адресной информации и один адрес для информации о бизнес-адресе.Два объекта без коллекций

Я понял это с помощью коллекции, я могу добавлять и удалять многие коллекции адресов.

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

Но как я могу точно показать два адреса субъекта о создании или редактировании пользователя без коллекций?

ответ

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 

Любой способ работы. Второй вариант является более гибким и позволяет избежать необходимости добавлять дополнительные методы к объекту пользователя. Конечно, вы, вероятно, захотите эти методы в любом случае.

+0

Спасибо много @cerad, это решит мою проблему – smartcoderx

Смежные вопросы