我在symfony 3中创建了一个包含其他表单集合的表单。提交后我想操作不同的数据。我怎样才能访问它以及如何设置它们?
这是我尝试的方式:
public function registerAction(Request $request)
{
$register = $this->createFormBuilder()
->add('user', 'AppBundle\Form\Type\UserType', array(
'data_class' => User::class,
))
->add('userdata', 'AppBundle\Form\Type\UserdataType', array(
'data_class' => Userdata::class,
))
->add('addresses', 'AppBundle\Form\Type\AddressesType', array(
'data_class' => Addresses::class,
))
->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event){
$user = $event->getForm()->get('user')->getData();
$address = $event->getForm()->get('addresses')->getData();
$address->setSalutation($user->getSalutation());
})
->getForm();
$register->handleRequest($request);
if ($register->isSubmitted()) {
// do stuff
}
return $this->render('form/login_index.html.twig', [
'register' => $register->createView()
]);
}
在这个例子中:
$user = $event->getForm()->get('user')->getData();
$address = $event->getForm()->get('addresses')->getData();
$address->setSalutation($user->getSalutation());
答案 0 :(得分:1)
您应该将您正在处理的对象集成为createFormBuilder($object)
方法的参数。
例如:
$user = new User();
$form = $formFactory
->createBuilder($user)
->add('username', TextType::class);
然后添加订阅者,在这种情况下,$event->getData()
是用户
$form->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
/** @var User $user */
$user = $event->getData();
$form = $event->getForm();
// Your logic here ...
})->getForm();
<强>更新强>
如果您有一个嵌入的表单(与父类相关的属性),例如UserInformation,您只需拨打一个电话:
$form
->add('informations', UserInformationType::class)
->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
/** @var User $user */
$user = $event->getData();
/** @var UserInformation $userInformation */
$userInformation = $user->getInformation();
$form = $event->getForm();
// Your logic here ...
})->getForm();
祝你好运。