사용자 입력을 기반으로 동적으로 변경 데이터에 이벤트 리스너를 사용합니다. 매번 나는 세트 데이터와 필드 선택에 대해 PRE_SET_DATA
과 PRE_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
일이 일어날 것을 의미인가?
누군가 그것을 고치는 법을 알고 있습니까?