2016-09-20 1 views
1

에서 형 EntityType의 필드를 미리 기입하는 방법, I 형 EntityClass의 필드가 있습니다. 그런 다음 빈 상태로 유지되며 "선택하십시오"라는 메시지 만 표시됩니다.은 내 양식에서 PHP

$user = $this->userRepository->find(...); 
$form->get('user')->setData($user); 

을하지만 ->setData($user->getId()), 또는 ->setData($user->getEmail())를 호출하는 경우 그것은 또한 작동하지 않습니다

사전 충전은 다음과 같다.

그래서 EntityType 필드를 어떻게 미리 채 웁니 까?

+0

언제, 어디에서 데이터를 설정합니까? – DonCallisto

+0

또한, "주 양식"(그래서 당신이 빌더를 호출하는 곳)이 엔티티에 바인드되었거나 아닌지? – DonCallisto

+0

@DonCallisto 폼은 엔티티에 바인딩되지 않으며'$ form-> isSubmitted()'가'false'를 반환 할 때 컨트롤러에서 호출되는 서비스로 채워집니다. (상속을 사용하는 엔티티와의 관계 때문에 엔티티에 바인드 할 수 없습니다). – Jost

답변

1

Form을 미리 채워서는 안되며, 필요한 경우 Model을 미리 채워야합니다.

$user = $this->userRepository->find(...); 

$entity = new YourEntity(); 
$entity->setUser($user); 

$form = $this->createForm(YourEntity::class, $entity); 

그리고 약 EntityType이 아닙니다. Symfony의 모든 유형에 관한 것이므로 기본값을 바인딩 할 방법이 없습니다. 데이터는 모델에 바인딩됩니다.

UPD 코멘트 : 사실이 아니므로 양식이 모델없이 사용될 수 있습니다. Doctrine Entity 나 다른 ORM (또는 ORM이 아닌) Entity없이 사용될 수 있습니다. 그러나 그들은 여전히 ​​데이터로 작동합니다. 모델. 심포니 \ 구성 요소 \ 양식 \ FormFactoryInterface \

는 양식 구성 요소를 사용할 때 그래서 $data 어떤 종류의 항상 존재 정의를

public function create($type = 'form', $data = null, array $options = array()); 

있습니다.

+0

심포니의 폼은 엔티티와 완전히 분리되어 있습니다. 엔티티가 전혀 없어도 사용할 수 있습니다. 그것이 문서가 말하는 것입니다. 그리고 관련 엔터티의 상속을 이유로 모델을 폼에 바인딩 할 수 없습니다. – Jost

+0

그건 사실이 아니야. Doctrine Entity (또는 다른 ORM Entity)에서는 양식이 필요하지 않지만 일부 모델에서는 계속 작동합니다. FormFactoryInterface가 보이면 public function create ($ type = 'form', $ data = null, array $ options = array()); - $ data는 model입니다. 어떤 종류의 모델입니까? 그것은 당신에게 달렸습니다. –

+0

좋습니다. 데이터 모델은 간단한 연관 배열 일 수 있습니다. 양식을 만들 때 연관 배열을 제공하는 것으로 전환했습니다. 이제 작동합니다. 감사! – Jost