2012-05-29 2 views
4

나는 모델을 가지고 :Symfony2 형식의 EntityChoiceList에서 "기타"를 선택하는 방법은 무엇입니까? 아래에 설명 된대로

http://yuml.me/diagram/class/[Product]0..*-1[Brand]

나는 또한 모든 브랜드를 포함하는 드롭 다운 목록을 구축 필드 entity으로 새로운 제품을 만들 수있는 형태를 가지고있다.

이제 사용자가 다른 텍스트 필드에서 브랜드를 수동으로 지정할 수 있도록이 목록에 "기타"값을 추가하고 싶습니다.

질문 : Symfony2 양식을 사용하여이 케이스를 관리 할 수있는 명확한 방법이 있습니다 (예 : 목록에 "기타"값을 추가합니다. 엔티티가 아니며 양식 유효성 검사가 작동합니다).

답변

2

당신은

  • 당신은 FormEvents::BIND_CLIENT_DATA 형태의 이벤트를 구독 할 수 있습니다, 두 가지 방법으로 그것을 할 수 있습니다. 이벤트 메소드에서 텍스트에서 새로운 Brand 오브젝트를 작성하여 저장하고 $event->setData($data)을 호출하여 양식에 ID를 설정할 수 있습니다. 요리 책 항목 this을 참조하십시오.

또는

  • 당신은 데이터 변압기를 추가 할 수 있습니다. 해당 reverseTransform 메서드에서 개체를 만들고 해당 ID를 반환 할 수 있습니다. 요리 책 항목 this을 참조하십시오.
+0

답변 해 주셔서 감사합니다. 양식 이벤트를 둘러보고 있었는데 첫 번째 솔루션은 이론적으로 훌륭하게 보입니다. 문제는이 경우 각 양식에 대해 새로운 브랜드 개체를 유지하고 나중에 결국 삭제해야한다는 것입니다. 결국 더 나은 솔루션이라고 생각하지 않습니다. Data Transformer를 대신 살펴 보겠습니다. :) –

+2

음'FormEvents :: BIND_CLIENT_DATA' 이벤트 리스너는 제출 된 데이터를 처리합니다. 데이터 매핑이 발생하기 전에. 필드 값이 숫자인지 확인 만하면됩니다. 그렇지 않다면 엔티티를 저장하고 ID를 제출 된 데이터로 설정할 수 있습니다. –

+0

내 질문을 이해하지 못했다고 생각합니다. 좀 더 이해하기 쉽도록 편집했습니다. 나는 사실상 엔티티가 아닌리스트에 "Other"라는 값을 추가하고 싶습니다. 그리고 나는 그것이 지속되기를 원하지 않습니다. 이미 컬렉션과 "allow_add"옵션을 사용하여 새 브랜드를 동적으로 추가하는 방법을 알아 냈습니다 (그리고 btw, 2.1 이후 FormEvents :: BIND_CLIENT_DATA는 사용되지 않으므로 대신 PRE_BIND를 사용해야합니다.) http://bit.ly/JMYXih를 참조하십시오.). 내 문제는 목록에서 "비 엔티티"값을 처리하는 방법과 양식이 다시 올 때 유효성을 검사하는 방법을 모르겠다는 것입니다. 그래도 의견에 감사드립니다. :) –