2017-09-14 13 views
1

사용자 입력을 기반으로 동적으로 변경 데이터에 이벤트 리스너를 사용합니다. 매번 나는 세트 데이터와 필드 선택에 대해 PRE_SET_DATAPRE_SUBMIT 이벤트를 사용합니다.Symfony form 수집 필드 용 이벤트 리스너

// Pre set share locations by share day 
if (array_key_exists('shares', $data)) { 
    foreach ($data['shares'] as $key => $share) { 
     if ($share['pickUpDay'] !== null) { 
      $shareType = $form->get('shares')->get($key); 

      $locations = $this->em->getRepository('AppBundle:Member\Location')->getLocationsByDay($client, $data['shares'][$key]['pickUpDay']); 
      $this->addLocationField($shareType, $locations); 
     } 
    } 
} 

addLocationField 함수 내에서, 그것은 잘 작동 중요하지 : 여기 PRE_SUBMIT에서 행동의 간단한 예입니다.

$form->get('shares')의 컬렉션 필드 인 경우이 컬렉션의 ->get(child)이 필요하며 필드 데이터와 선택 항목을이 하위 세트로 바로 설정하십시오. 나는 동적으로 모음을 추가 할 때까지, 심포니는 오류 보여줍니다

Child "n" does not exist.

내가 동적으로 추가 된 새 컬렉션의 데이터를 얻을 수하려고 할 때이 문제가 발생합니다. 따라서 수집 필드로 이동하여 선택 항목을 변경할 수 없으므로 새 값이 선택 목록에 없다는 오류가 발생합니다. $data['shares'] 새로운 콜렉션 요소에 대한 모든 데이터를 가지고 재미있는

하지만 $form->get('shares') haven`t :

var_dump(count($event->getData()['shares'])) - return 1; 
var_dump(count($form->get('shares'))) - return 0; 

즉 심포니 수집 기능 전에 내 PRE_SUBMIT 일이 일어날 것을 의미인가?

누군가 그것을 고치는 법을 알고 있습니까?

답변

0

나는 귀하의 질문에 "이전"을 알고 당신은 아마 해결책을 찾았지만 당신이 말한 때 올바른 방향으로했다 :

Is that mean that my PRE_SUBMIT works before Symfony collection functionality happen?

새 컬렉션을 아직 제출되지 않고는 존재하지 않습니다 모델 see this part of the doc

당신이, 당신이 the SUBMIT event

NB를 사용해야 원하는 것을 만들려면 : 당신은 POST_SUBMIT

에 모든 필드를 추가 할 수 없습니다