2015-01-07 1 views
1

다음과 같은 문제점이 있습니다. 이름이 "user"인 하나의 엔티티는 엔티티 "주소"와 다 대다 관계를 유지합니다. "UserType"형식을 만들고 싶습니다. 이 양식에서 엔티티 주소를 정확하게 보여줍니다. privat 주소 정보를위한 하나의 주소와 비즈니스 주소 정보를위한 하나의 주소.컬렉션이없는 두 개체

컬렉션으로 이것을 깨달았습니다. 주소 컬렉션을 추가하거나 삭제할 수 있습니다.

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

하지만 내가 어떻게 정확히 작성하거나 수집하지 않고 사용자 편집에 두 개의 주소 항목을 표시 할 수 있습니다?

답변

1

몇 가지 접근법이 있습니다. 하나는 사용자 엔티티에 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

대단히 감사합니다. 제러드, 제 문제를 해결합니다. – smartcoderx