2012-07-17 4 views
4

이 주제에 관한 문서가 다소 얇 으면 막 다른 골목에 처하게됩니다.

두 가지 모델이 있습니다 : Job 및 JobAttribute. 나는 다음과 같은 FormClass이 지금

class Job { 
    /** 
    * @ORM\OneToMany(targetEntity="JobAttribute", mappedBy="job_attributes") 
    * 
    * @var ArrayCollection 
    */ 
    private $attributes; 
} 

class JobAttribute { 
    /** 
    * @ORM\Column(name="type", type="string", length=50) 
    * 
    * @var string 
    */ 
    private $type; 

    /** 
    * @ORM\ManyToOne(targetEntity="Job", inversedBy="jobs") 
    */ 
    private $job; 

: 작업이 많은 인 JobAttributes을 가지고 있으며, JobAttribute와 하나의 작업이

class JobType extends AbstractType { 
    public function buildForm(FormBuilder $f, array $options) { 
     $f->add('name', 'text'); 
     $f->add('attributes', 'collection', array('type' => new JobAttributeType())); 
    } 

    public function getName() { 
     return 'job'; 
    } 
} 

class JobAttributeType extends AbstractType { 
    public function buildForm(FormBuilder $f, array $options) { 
     $attribute = $options['data']; 
     $f->add('value', $attribute->getType()); 
    } 

    public function getDefaultOptions(array $options) { 
     return array('data_class' => 'JWF\WorkflowBundle\Entity\JobAttribute'); 
    } 

    public function getName() { 
     return 'job_attribute'; 
    } 
} 

예, 참, JobAttribute와의 type 속성은 양식 필드 유형을 포함을, 예. 본문.

그래서 내 컨트롤러의 JobType에서 FormBuilder를 호출하면 $ options [ 'data']에 JobType 내의 Job-Object가 올바르게 채워집니다. 그러나 중첩 된 JobAttributeType의 $ options [ 'data']는 JobAttribute 객체를 가리 키지 않습니다. 그것은 NULL입니다.

무엇이 문제입니까? 협회는 어디에서 분실 되었습니까? 왜 $ options [ 'data'] = 중첩 된 형태로 NULL입니까? 동적 필드 유형 (Doctrine 외)을 중첩 된 양식으로 가져 오기위한 해결 방법이 있습니까?

미리 감사드립니다.

답변

3

양식을 작성할 때 $options['data']을 신뢰할 수 없습니다. 양식을 작성할 때 데이터를 변경할 수 있기 때문에 언제든지 변경할 수 있습니다. 대신에 이벤트 리스너를 사용해야합니다.

이 설명서의 내용은 can be found in the cookbook입니다.

+0

안녕하세요. 양식 데이터가 필요한 'DataTransformer'는 무엇입니까? 'PRE_SET_DATA' 이벤트에서 아무것도 할 수없고,'options [ 'data']'가 빌드 중에 값이 없다면, 어떻게 변압기를 부착 할 수 있습니까? 감사. – DonCallisto