종속 선택 상자를 만들려고합니다. 첫 번째 선택 상자가 선택되면 두 번째 선택 상자를 채워야합니다.양식 이벤트에서 매핑되지 않은 양식 데이터에 액세스
첫 번째 선택 상자가 모델에 매핑되지 않았습니다. 내 컨트롤러에서 수동으로 값을 $form->get('emailTemplateBlockType')->setData($emailTemplateBlockType)
으로 설정합니다. 내 양식 이벤트에서이 데이터를 사용하여 두 번째 선택 상자를 만들려면 어떻게해야합니까?
$builder
->add('emailTemplateBlockType', 'entity', array(
'class' => 'MbDbMVibesBundle:EmailTemplateBlockType',
'property' => 'name',
'mapped' => false,
'empty_value' => 'Choose a block type',
'attr' => array(
'class' => 'emailTemplateBlockTypeSelect',
)
))
->add('save', 'submit');
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
echo "name: ".$form->get('emailTemplateBlockType')->getData()->getName();
die;
});
첫 번째 선택 상자를 내 frontcontroller에 다시 게시하는 jQuery와 함께 onChange 이벤트가 있습니다. 프론트 컨트롤러는 폼을 다시 생성하지만 이번에는 첫 번째 선택 상자의 값이 추가됩니다. 하지만 제출이 아니므로 POST_SUBMIT 이벤트를 사용하면 문제가 해결되지 않습니다. 내 컨트롤러에서
발췌문 :
$form = $this->createForm(new EmailTemplateSiteEmailTemplateBlockType(), $entity, array(
'action' => $this->generateUrl('_email_tpl_site_block_edit', array(
'emailTemplateSiteId' => $emailTemplateSiteId,
'emailTemplateSiteBlockId' => $emailTemplateSiteBlockId,
))
));
if ($request->request->get('blockTypeId')) {
$this->get('logger')->debug('setting block type');
$emailTemplateBlockType = $em->getRepository('MbDbMVibesBundle:EmailTemplateBlockType')
->find($request->request->get('blockTypeId'));
if ($emailTemplateBlockType)
$form->get('emailTemplateBlockType')->setData($emailTemplateBlockType);
else
throw new $this->createNotFoundException('Cannot find blocktype with id '.$request->request->get('blockTypeId'));
}
$form->handleRequest($request);
대신 해당 이벤트를 'POST_SUBMIT'에 바인딩 했습니까? –
예, 방금 시도했는데 양식을 다시로드하기 위해 제출하지 않았기 때문에 작동하지 않습니다. 아마 제 질문을 수정해야합니다. – rolandow
@rolandow : PRE_SUBMIT 이벤트를 사용하면 원시 데이터를 얻습니다. – jamek