2012-06-08 2 views
3

2 개의 결합 된 개체에서 양식을 만들 수 있습니까?Symfony2 + Doctrine2/2 개의 결합 된 개체에서 양식 만들기

나는 하나의 관계에 합쳐진 두 개의 개체 property & propertylanguage을 가지고 있습니다. (하나의 속성은 많은 언어를 가질 수 있습니다)

언어는 titledescription 개의 열을 가지고 있습니다. 하나의 속성은 영어, 프랑스어, 독일어 제목을 가질 수 있습니다.

나는 그 중에서 하나의 양식을 만들려고 노력하고 있습니다. 아래를 참조하십시오.

컨트롤러 : addProperty.php

class AddPropertyController extends Controller 
{ 
    // .... 

    public function indexAction(Request $request) 
    { 
     $property = new property; 
     $language = new propertyLanguage; 
     $property ->addpropertylanguage($language); 

     $form = $this->createForm(new propertyType($this->getDoctrine()),$property); 

     // ..... 

    } 

양식 유형 : propertType.php

public function buildForm(FormBuilder $builder, array $options) 
    { 

     $builder 
      ->add('title', 'text'); 
      // other ->add() below. 

    } 

그것은 다음과 같은 오류 반환 : 물론

Neither property "title" nor method "getTitle()" nor method "isTitle()" exists in class "\defaultBundle\Entity\property"

이를 적절한 속성에 제목이 있지만 속성 언어에 하나가 있습니다. 시도해도 : -> add ('title', 'entity', array ('class'=> defaultBundle : propertylanguage)); 작동하지 않습니다.

도와 주셔서 감사합니다.

최고,

피에르.

답변

0

양식을 정의 할 때 query_builder를 사용할 수 있습니다. 폼 클래스가 어떻게 생겼는지 보여줍니다. 당신이 원하는 것 무엇

+0

안녕하세요. 시간과 도움을 많이 주셔서 감사합니다. 실제로 엔터티 개체에서 양식을 작성하려면 작동하지 않는다고 생각하기 때문에 queryBuilder를 사용하지 않는 것이 좋습니다. 인스턴스에서 $ form = $ this-> createForm (새 속성 유형 ($ this-> getDoctrine()), $ property); 나는 모범 사례를 보이는 서사드 대답을하러 갈 것이다. 시간을 내 주셔서 다시 한 번 감사합니다. – 123pierre

+0

안녕하세요, 저는 한 번 프로젝트를 위해 한 번 사용해 보았지만 작동하지만 Cerad 솔루션도 확실히 작동합니다! 해피 코딩;) – SebScoFr

1

뿐만 아니라 PropertyLanguageType 클래스를 만들입니다 도움이 될거야)

public function __construct($id) 
{ 
    $this->propertylanguageId = $id; 
} 

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('propertylanguage', 'entity', array(
        'label' => 'Property Language', 
        'class' => 'YourAdressToBundle:Propertylanguage', 
        'query_builder' => function(EntityRepository $er) use ($propertylanguageId) { 
              return $er->createQueryBuilder('p') 
              ->join('p.property', 'prop', Expr\Join::WITH, 'prop.id = :propertylanguageId') 
              ->setParameter('propertylanguageId', $propertylanguageId); 
             }, 
       )); 
} 

희망, 물론 그것은 확실히 정확하게 그래서되지 않습니다하지만 당신에게 좋은 시작을 줄 것이다 PropertyType로서. 당신이 제목을 추가 곳

public function buildForm(FormBuilder $builder, array $options) 
{ 

    // $builder->add('propertyLanguage', new PropertyLanguageType()); 

    // Since we have a 1 to many relation, then a collection is needed 
    $builder->add('propertyLanguage', 'collection', array('type' => new PropertyLanguageType())); 

PropertyLanguageType입니다 :

그런 다음 PropertyType에 당신은 PropertyLanguageType을 포함합니다.

설명서의 양식 섹션에 모두 나와 있지만 몇 가지 정보가 필요할 수 있습니다.

두 번째 방법은 PropertyLanguage 엔터티에서 제목을 반환하는 Property 엔터티에 getTitle을 추가하는 것입니다. 이렇게하면 원래 양식이 작동합니다. 그러나 여러 속성을 가진 여러 연관을 갖기 시작하면 다소 혼란 스러울 수 있습니다. 각 엔티티에 대한 유형을 정의하는 것이 가장 좋습니다.

+0

안녕하세요 Cerad, 고마워, 내가 뭘 내게 줘. 그것은 완벽하게 작동합니다! 저는 아직 평판이 15 세 이하이므로 응답에 투표 할 수 없습니다. 고마워요. – 123pierre

+1

답변을 수락 할 수있을 것 같습니까? 어쨌든 내가 도울 수있어서 기뻤습니다. – Cerad